Package ru.bgcrm.util

Class XMLUtils


  • public class XMLUtils
    extends java.lang.Object
    • Constructor Summary

      Constructors 
      Constructor Description
      XMLUtils()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static void createTextNode​(org.w3c.dom.Node node, java.lang.String text)
      Создание текстового узла - потомка.
      static java.lang.Iterable<org.w3c.dom.Element> elements​(org.w3c.dom.NodeList nodeList)
      Делает Iterable от Element из NodeList, для удобного обхода.
      static org.w3c.dom.Element getElement​(org.w3c.dom.Document doc, java.lang.String elementName)
      Ищет элемент в документе по имени.
      static java.lang.String getElementText​(org.w3c.dom.Node node)
      Вытаскивает содержимое XML-элемента в виде строки вместе со всеми дочерними тегами
      static org.w3c.dom.Node getNode​(org.w3c.dom.Document doc, java.lang.String nodeName)
      Берёт Node по имени тега из Document.
      static org.w3c.dom.Document newDocument()
      Создаёт и возвращает новый объект XML документ.
      static org.w3c.dom.Element newElement​(org.w3c.dom.Document parent, java.lang.String name)
      Создать элемент на родительском документе.
      static org.w3c.dom.Element newElement​(org.w3c.dom.Element parent, java.lang.String name)
      Создаёт объект-узел с заданным именем в родительском узле.
      static org.w3c.dom.Document parseDocument​(java.io.InputStream stream)  
      static org.w3c.dom.Document parseDocument​(java.io.InputStream stream, boolean showError)  
      static org.w3c.dom.Document parseDocument​(org.xml.sax.InputSource source)  
      static org.w3c.dom.Document parseDocument​(org.xml.sax.InputSource source, boolean showError)  
      static void parseDocument​(org.xml.sax.InputSource source, org.xml.sax.ContentHandler handler)  
      static void prepareElementToSerialize​(org.w3c.dom.Node el)
      Подготавливает элемент к XML сериализации, заменяет запрещённые символы на \\u{code}.
      static java.lang.String prepareString​(java.lang.StringBuilder buf, java.lang.String nodeValue)
      Подготавливает строки к XML сериализации, заменяет запрещённые символы на \\u{code}.
      static org.w3c.dom.Element selectElement​(org.w3c.dom.Node node, java.lang.String expression)
      Возвращает элемент по XPath expression.
      static java.lang.Iterable<org.w3c.dom.Element> selectElements​(org.w3c.dom.Node node, java.lang.String expression)  
      static org.w3c.dom.Node selectNode​(org.w3c.dom.Node node, java.lang.String expression)
      Возвращает Node по XPath expression.
      static org.w3c.dom.NodeList selectNodeList​(org.w3c.dom.Node node, java.lang.String expression)
      Возвращает NodeList по XPath expression.
      static java.lang.String selectText​(org.w3c.dom.Node node, java.lang.String expression)
      Выборка строкового значения по xpath.
      static java.lang.String selectText​(org.w3c.dom.Node node, java.lang.String expression, java.lang.String defaultValue)
      Выборка строкового значения по xpath.
      static void serialize​(org.w3c.dom.Node xml, java.io.OutputStream result, java.lang.String encoding, boolean pretty)  
      static void setAttribute​(org.w3c.dom.Element element, java.lang.String name, java.lang.String value)
      Установка значения атрибута, только если оно не равно null.
      static void transform​(javax.xml.transform.Source xml, javax.xml.transform.Source xslt, javax.xml.transform.Result res, java.lang.String enc)
      Трансформация xml+xstl→выход
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • XMLUtils

        public XMLUtils()
    • Method Detail

      • getElementText

        public static java.lang.String getElementText​(org.w3c.dom.Node node)
        Вытаскивает содержимое XML-элемента в виде строки вместе со всеми дочерними тегами
        Parameters:
        node -
        Returns:
      • newDocument

        public static final org.w3c.dom.Document newDocument()
        Создаёт и возвращает новый объект XML документ.
        Returns:
      • newElement

        public static final org.w3c.dom.Element newElement​(org.w3c.dom.Element parent,
                                                           java.lang.String name)
        Создаёт объект-узел с заданным именем в родительском узле.
        Parameters:
        parent - родительский узел.
        name - имя нового узла.
        Returns:
      • newElement

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

        public static void createTextNode​(org.w3c.dom.Node node,
                                          java.lang.String text)
        Создание текстового узла - потомка. То есть "устанавливаем текст внутрь указанного нода". Если нод - /data, то будет <data>текст</data>
        Parameters:
        node - узел
        text - текст
      • setAttribute

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

        public static org.w3c.dom.Document parseDocument​(java.io.InputStream stream)
      • parseDocument

        public static org.w3c.dom.Document parseDocument​(java.io.InputStream stream,
                                                         boolean showError)
      • parseDocument

        public static org.w3c.dom.Document parseDocument​(org.xml.sax.InputSource source)
      • parseDocument

        public static org.w3c.dom.Document parseDocument​(org.xml.sax.InputSource source,
                                                         boolean showError)
      • parseDocument

        public static void parseDocument​(org.xml.sax.InputSource source,
                                         org.xml.sax.ContentHandler handler)
      • getElement

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

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

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

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

        public static org.w3c.dom.NodeList selectNodeList​(org.w3c.dom.Node node,
                                                          java.lang.String expression)
        Возвращает NodeList по XPath expression.
        Parameters:
        node -
        expression - XPath expression
        Returns:
        NodeList, если найден - иначе null
      • selectElements

        public static java.lang.Iterable<org.w3c.dom.Element> selectElements​(org.w3c.dom.Node node,
                                                                             java.lang.String expression)
      • elements

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

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

        public static java.lang.String selectText​(org.w3c.dom.Node node,
                                                  java.lang.String expression,
                                                  java.lang.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:
        selectNode(org.w3c.dom.Node, java.lang.String)
      • serialize

        public static void serialize​(org.w3c.dom.Node xml,
                                     java.io.OutputStream result,
                                     java.lang.String encoding,
                                     boolean pretty)
                              throws java.lang.Exception
        Throws:
        java.lang.Exception
      • prepareElementToSerialize

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

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

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