Class XMLUtils

java.lang.Object
ru.bitel.common.XMLUtils

public class XMLUtils extends Object
  • Field Details

  • Constructor Details

    • XMLUtils

      public XMLUtils()
  • Method Details

    • newXMLInputFactory

      public static final XMLInputFactory newXMLInputFactory()
    • newXMLEventReader

      public static final XMLUtils.BGXMLEventReader newXMLEventReader(Reader reader)
    • newXMLEventReader

      public static final XMLUtils.BGXMLEventReader newXMLEventReader(InputStream is)
    • newXMLEventReader

      public static final XMLUtils.BGXMLEventReader newXMLEventReader(XMLInputFactory xmlif, Reader reader)
    • newXMLEventReader

      public static final XMLUtils.BGXMLEventReader newXMLEventReader(XMLInputFactory xmlif, InputStream is)
    • newDocument

      public static final Document newDocument() throws ru.bitel.bgbilling.common.BGRuntimeException
      Создаёт и возвращает новый пустой объект XML документ.
      Throws:
      ru.bitel.bgbilling.common.BGRuntimeException - при любой ошибке (которой не должно быть по идее)
    • createElement

      public static final Element createElement(Document parent, String name)
      Создать элемент на родительском документе. Ибо для Element версия ни при каких условиях не работает (OwnerDocument всегда null), не помогает и всякие getDocumentElement.
      Parameters:
      parent -
      name -
      Returns:
    • createElement

      public static Element createElement(Element parentElement, String name)
      Создание нового элемента и добавление его в родительский элемент
            element = parentElement.getOwnerDocument().createElement( name );
            parentElement.appendChild( element );
      Parameters:
      parentElement - родительский элемент
      name - имя нового элемента
      Returns:
      новый элемент
    • createElementNS

      public static final Element createElementNS(Document parent, String xmlns, String name)
      Создать элемент на родительском документе c заданным xmlns, добавляя его как дочерний. ...
      Parameters:
      parent - документ
      xmlns - неймспейс (если null, то будет просто без ns)
      name - имя элемента
      Returns:
      созданный элемент.
    • createTextNode

      public static void createTextNode(Node node, String text)
      Создание текстового узла - потомка.
           node.appendChild( node.getOwnerDocument().createTextNode( text ) );
      Parameters:
      node - узел-предок
      text - текст
    • createListElement

      public static Element createListElement(Element parentElement, String name, List<?> list, Class<?> clazz)
      Вызов createListElement( parentElement, name, list, clazz, null );
      Parameters:
      parentElement - родительский элемент
      name - имя нового элемента
      list - список с объектами для постотроение списка элементов
      clazz - класс объектов списка
      Returns:
      корневой элемент списка
    • createListElement

      public static Element createListElement(Element parentElement, String name, List<?> list, Class<?> clazz, String[] fields)
      Генерация Элемента содержащего список объектов со значениями свойств в виде аттрибутов
      Parameters:
      parentElement - родительский элемент
      name - имя нового элемента
      list - список с объектами для постотроение списка элементов
      clazz - класс объектов списка
      fields - список свойств которые нужно добавлять в аттрибуты елементов списка
      Returns:
      корневой элемент списка
    • createListElement

      public static Element createListElement(Element parentElement, String name, String itemName, List<?> list, Class<?> clazz, String[] fields)
    • addListItem

      public static Element addListItem(Node node, int id, String title)
    • addListItem

      public static Element addListItem(Node node, String id, String title)
    • addListItem

      public static Element addListItem(Node node, String nameNode, String id, String title)
      создаёт элемент списка с атрибутами "id"/"title"
    • setPageAttribute

      public static void setPageAttribute(Element element, Page page)
      заполняет стандартные атрибуты на элементе для объекта Page
    • setAttribute

      public static void setAttribute(Element element, String name, String value)
      Установка значения атрибута, только если оно не равно null.
      Parameters:
      element - элемент
      name - имя аттрибута
      value - значение аттрибута
    • parseDocument

      public static Document parseDocument(String data)
      парсинг документов
      Parameters:
      stream -
      Returns:
    • parseDocument

      public static Document parseDocument(byte[] data)
    • parseDocument

      public static Document parseDocument(byte[] data, boolean showError)
    • parseDocument

      public static Document parseDocument(byte[] data, XMLUtils.ErrorShowType errorShowType) throws ru.bitel.bgbilling.common.BGException
      Throws:
      ru.bitel.bgbilling.common.BGException
    • parseDocument

      public static Document parseDocument(InputSource source)
    • parseDocument

      public static Document parseDocument(InputSource source, boolean showError)
      старый вариант общего метода парсинга документа с showError=true/false, скрывающий экзепшен
    • parseDocument

      public static Document parseDocument(InputSource source, XMLUtils.ErrorShowType errorShowType) throws ru.bitel.bgbilling.common.BGException
      общий метод парсинга документа
      Throws:
      ru.bitel.bgbilling.common.BGException - если вариант кинуть ошибку (оригинальный экзепшен будет в cause)
    • parseDocument

      public static void parseDocument(InputSource source, ContentHandler handler)
    • getElement

      public static Element getElement(Document doc, String elementName)
      Ищет элемент в документе по имени. Если не находит - возвращает созданный.
      Parameters:
      doc -
      elementName -
      Returns:
    • getNode

      public static Node getNode(Document doc, String nodeName)
      Берёт Node по имени тега из Document. В случае отсутствия - создаёт новый Node и возвращает его.
      Parameters:
      doc - документ
      nodeName - имя узла
      Returns:
      узел
      See Also:
      • findElement
    • selectElement

      public static Element selectElement(Node node, String expression)
      Возвращает элемент по XPath expression.
      Parameters:
      node -
      expression - XPath expression
      Returns:
      элемент, если найден - иначе null
      See Also:
    • selectNode

      public static Node selectNode(Node node, String expression)
      Возвращает Node по XPath expression. Пример: /data/table - выбрать элемент table лежащий в корне. Пример: //table - выбрать элемент table где попало
      Parameters:
      node -
      expression - XPath expression
      Returns:
      Node, если найден - иначе null
    • selectElements

      public static Iterable<Element> selectElements(Node node, String expression)
      Итератор элементов nodelist по XPath. Пример: /tables/* - выбрать все элементы внутри родительского tables в корне.
    • elements

      public static Iterable<Element> elements(NodeList nodeList)
      Делает Iterable от Element из NodeList, для удобного обхода.
      Parameters:
      nodeList - исходный NodeList
      Returns:
      Iterable<Element>.
    • selectText

      public static String selectText(Node node, String expression)
      Выборка строкового значения по xpath. Дефолт валуе - null.
      See Also:
    • selectText

      public static String selectText(Node node, String expression, String defaultValue)
      Выборка строкового значения по xpath. То есть практически тоже самое, что selectNode, только от него возвращается node value, либо null, если что-то не найдено или какая-то ошибка (нуть не должен возвращать текст итд) Может возвращать и значения текстовых нод и значения атрибутов, универсальная.

      В целом, не предназначен для выборок вроде selectText( node, "@selected", null), потому что в том что getAttribute возвращает не null, а пустую строку нет ничего страшного. Тем более есть метод, который и null возвращает и работает быстрее.

      Примеры запросов:
      1) запрос текстового значения атрибута
       <data><payment cardnumber="111">...
       /data/payment/@cardnumber
       
      2) запрос текстового значения ноды
       ...<operation><pursesrc>текст</pursesrc>...
       /operation/pursesrc/text()
       
      3) не от корня, а относительно - начиная не со сшеша
      4) искать где попало - два слеша
      5) и т.д., ну вы поняли
      Parameters:
      node - ноде корневой
      expression - xpath
      defaultValue - значение по умолчанию
      Returns:
      строка
      See Also:
    • getAttribute

      public static String getAttribute(Element element, String name)
      Получение аттрибута элемента. Когда нет аттрибута - возвращает null.
      Parameters:
      element - элемент
      name - имя аттрибута
      Returns:
      строка значение аттрибута (или нулл)
    • getAttribute

      public static String getAttribute(Element element, String name, String defaultValue)
      Получение аттрибута элемента. Сделана ввиду дурацкой domовской привычки доставать несуществующие принципиально аттрибуты как пустые строки, что не может меня не волновать при реализации некоторых задумок, пусть когда нет аттрибута - возвращает defaultValue.
      Parameters:
      element - элемент
      name - имя аттрибута
      defaultValue - значение по умолчанию.
      Returns:
      строка значение аттрибута (или значение по умолчанию)
    • getEnumAttribute

      public static <E extends Enum<E>> E getEnumAttribute(Element element, String name, E defaultValue)
      Получение аттрибута представляющего строковое значение enum-типа
      Type Parameters:
      E - тип, представляющий enum (!)
      Parameters:
      element - dom-элемент
      name - имя аттрибута
      defaultValue - значение по умолчанию, отсюда же берётся тип/класс (генерик же используется, чтобы отдельно тип не передавать)
      Returns:
      значение emun-типа или значение по умолчанию
    • getAttributeIntValue

      public static int getAttributeIntValue(Node node, String name, int defaultValue)
      Возвращает целочисленное значение атрибута.
      Parameters:
      node -
      name -
      defaultValue -
      Returns:
    • attributesToMap

      @Deprecated public static Map<String,String> attributesToMap(Element element)
      Deprecated.
      используйте обертку из ParameterMap вокруг Element //TODO: Выяснить что за обертка и заменить на нее!
      Parameters:
      element -
      Returns:
    • attributesToParameterMap

      public static ParameterMap attributesToParameterMap(Element element)
    • serialize

      public static void serialize(Node node, OutputStream os, String encoding)
      Сериализует в выходной поток с указанием кодировки. Без отступов.
      Parameters:
      node - нода (обычно Document)
      os - OutputStream
      encoding - кодировка (и документа и представления в байтовой строке)
    • serialize

      public static void serialize(Node node, Result result, String encoding, boolean indent)
      Сериализует XML документ.
      Parameters:
      node - - узел документа.
      result - - объект с результатом (если надо во Writer, то обернуть в StreamResult).
      encoding - - кодировка, может быть null.
      indent - - форматирование (отступы).
    • serializeToString

      public static String serializeToString(Node node, boolean indent)
      Parameters:
      node - нода (обычно xml-документ)
      indent - есть отступы или нет
      Returns:
      содержимое xml документа в виде строки, в uft-8, с отступами (при indent=true) и с начальным xml-declaration
    • getSerializeProperties

      public static Properties getSerializeProperties(String encoding, boolean indent)
      можно добавить properties.put( OutputKeys.OMIT_XML_DECLARATION, "yes" );
      Parameters:
      encoding -
      indent -
      Returns:
    • serialize

      public static void serialize(Node node, Result result, Properties properties)
    • prepareElementToSerialize

      public static void prepareElementToSerialize(Node el)
      Подготавливает элемент к XML сериализации, заменяет запрещённые символы на \\u{code}. Используется в местах, где возможно появление недопустимых XML символов.
      Parameters:
      el - исходный элемент в теле, названии, дочерних элементах и атрибутах возможны запрещённые символы.
    • prepareString

      public static String prepareString(StringBuilder buf, String nodeValue)
      Подготавливает строки к XML сериализации, заменяет запрещённые символы на \\u{code}. Используется в местах, где возможно появление недопустимых XML символов.
      Parameters:
      buf - вспомогательный буфер, в который складывается результат, чтобы не выделять каждый раз заново.
      nodeValue - исходная строка, где возможны запрещённые символы.
      Returns:
    • transform

      public static void transform(Source xml, Source xslt, Result res, String enc) throws TransformerException
      Трансформация xml+xstl→выход
      Parameters:
      xml - исходный документ xml в виде Source.
      xslt - исходный документ xslt в виде Source.
      res - результат (например, готовый FO-документ) в виде Result.
      enc - кодировка.
      Throws:
      TransformerException - ошибка трансформации.
    • escapeXmlNotValid

      public static String escapeXmlNotValid(StringBuilder buf, String value)