Package ru.bitel.common
Class XMLUtils
java.lang.Object
ru.bitel.common.XMLUtils
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
static enum
что делать с ошибкамиstatic class
static class
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic Element
addListItem
(Node node, int id, String title) static Element
addListItem
(Node node, String id, String title) static Element
addListItem
(Node node, String nameNode, String id, String title) создаёт элемент списка с атрибутами "id"/"title"attributesToMap
(Element element) Deprecated.static ParameterMap
attributesToParameterMap
(Element element) static final Element
createElement
(Document parent, String name) Создать элемент на родительском документе.static Element
createElement
(Element parentElement, String name) Создание нового элемента и добавление его в родительский элементstatic final Element
createElementNS
(Document parent, String xmlns, String name) Создать элемент на родительском документе c заданным xmlns, добавляя его как дочерний.static Element
createListElement
(Element parentElement, String name, String itemName, List<?> list, Class<?> clazz, String[] fields) static Element
createListElement
(Element parentElement, String name, List<?> list, Class<?> clazz) Вызов createListElement( parentElement, name, list, clazz, null );static Element
createListElement
(Element parentElement, String name, List<?> list, Class<?> clazz, String[] fields) Генерация Элемента содержащего список объектов со значениями свойств в виде аттрибутовstatic void
createTextNode
(Node node, String text) Создание текстового узла - потомка.Делает Iterable от Element из NodeList, для удобного обхода.static String
escapeXmlNotValid
(StringBuilder buf, String value) static String
getAttribute
(Element element, String name) Получение аттрибута элемента.static String
getAttribute
(Element element, String name, String defaultValue) Получение аттрибута элемента.static int
getAttributeIntValue
(Node node, String name, int defaultValue) Возвращает целочисленное значение атрибута.static Element
getElement
(Document doc, String elementName) Ищет элемент в документе по имени.static <E extends Enum<E>>
EgetEnumAttribute
(Element element, String name, E defaultValue) Получение аттрибута представляющего строковое значение enum-типаstatic Node
Берёт Node по имени тега из Document.static Properties
getSerializeProperties
(String encoding, boolean indent) можно добавить properties.put( OutputKeys.OMIT_XML_DECLARATION, "yes" );static final Document
Создаёт и возвращает новый пустой объект XML документ.static final XMLUtils.BGXMLEventReader
static final XMLUtils.BGXMLEventReader
newXMLEventReader
(Reader reader) static final XMLUtils.BGXMLEventReader
newXMLEventReader
(XMLInputFactory xmlif, InputStream is) static final XMLUtils.BGXMLEventReader
newXMLEventReader
(XMLInputFactory xmlif, Reader reader) static final XMLInputFactory
static Document
parseDocument
(byte[] data) static Document
parseDocument
(byte[] data, XMLUtils.ErrorShowType errorShowType) static Document
parseDocument
(String data) static Document
parseDocument
(InputSource source) старый вариант общего метода парсинга документа с showError=true/false, скрывающий экзепшенstatic void
parseDocument
(InputSource source, ContentHandler handler) static Document
parseDocument
(InputSource source, XMLUtils.ErrorShowType errorShowType) общий метод парсинга документаstatic void
Подготавливает элемент к XML сериализации, заменяет запрещённые символы на \\u{code}.static String
prepareString
(StringBuilder buf, String nodeValue) Подготавливает строки к XML сериализации, заменяет запрещённые символы на \\u{code}.static Element
selectElement
(Node node, String expression) Возвращает элемент по XPath expression.selectElements
(Node node, String expression) Итератор элементов nodelist по XPath.static Node
selectNode
(Node node, String expression) Возвращает Node по XPath expression.static String
selectText
(Node node, String expression) Выборка строкового значения по xpath.static String
selectText
(Node node, String expression, String defaultValue) Выборка строкового значения по xpath.static void
serialize
(Node node, OutputStream os, String encoding) Сериализует в выходной поток с указанием кодировки.static void
Сериализует XML документ.static void
serialize
(Node node, Result result, Properties properties) static String
serializeToString
(Node node, boolean indent) static void
setAttribute
(Element element, String name, String value) Установка значения атрибута, только если оно не равно null.static void
setPageAttribute
(Element element, Page page) заполняет стандартные атрибуты на элементе для объекта Pagestatic void
Трансформация xml+xstl→выход
-
Field Details
-
ELEMENT_NAME_ROW
- See Also:
-
ELEMENT_NAME_ITEM
- See Also:
-
ELEMENT_NAME_LIST
- See Also:
-
slashPattern
-
-
Constructor Details
-
XMLUtils
public XMLUtils()
-
-
Method Details
-
newXMLInputFactory
-
newXMLEventReader
-
newXMLEventReader
-
newXMLEventReader
public static final XMLUtils.BGXMLEventReader newXMLEventReader(XMLInputFactory xmlif, Reader reader) -
newXMLEventReader
public static final XMLUtils.BGXMLEventReader newXMLEventReader(XMLInputFactory xmlif, InputStream is) -
newDocument
Создаёт и возвращает новый пустой объект XML документ.- Throws:
ru.bitel.bgbilling.common.BGRuntimeException
- при любой ошибке (которой не должно быть по идее)
-
createElement
Создать элемент на родительском документе. Ибо для Element версия ни при каких условиях не работает (OwnerDocument всегда null), не помогает и всякие getDocumentElement.- Parameters:
parent
-name
-- Returns:
-
createElement
Создание нового элемента и добавление его в родительский элементelement = parentElement.getOwnerDocument().createElement( name ); parentElement.appendChild( element );
- Parameters:
parentElement
- родительский элементname
- имя нового элемента- Returns:
- новый элемент
-
createElementNS
Создать элемент на родительском документе c заданным xmlns, добавляя его как дочерний.... - Parameters:
parent
- документxmlns
- неймспейс (если null, то будет просто без ns)name
- имя элемента- Returns:
- созданный элемент.
-
createTextNode
Создание текстового узла - потомка.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
-
addListItem
-
addListItem
-
addListItem
создаёт элемент списка с атрибутами "id"/"title" -
setPageAttribute
заполняет стандартные атрибуты на элементе для объекта Page -
setAttribute
Установка значения атрибута, только если оно не равно null.- Parameters:
element
- элементname
- имя аттрибутаvalue
- значение аттрибута
-
parseDocument
-
parseDocument
-
parseDocument
public static Document parseDocument(byte[] data, XMLUtils.ErrorShowType errorShowType) throws ru.bitel.bgbilling.common.BGException - Throws:
ru.bitel.bgbilling.common.BGException
-
parseDocument
старый вариант общего метода парсинга документа с 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
-
getElement
Ищет элемент в документе по имени. Если не находит - возвращает созданный.- Parameters:
doc
-elementName
-- Returns:
-
getNode
Берёт Node по имени тега из Document. В случае отсутствия - создаёт новый Node и возвращает его.- Parameters:
doc
- документnodeName
- имя узла- Returns:
- узел
- See Also:
-
findElement
-
selectElement
Возвращает элемент по XPath expression.- Parameters:
node
-expression
- XPath expression- Returns:
- элемент, если найден - иначе null
- See Also:
-
selectNode
Возвращает Node по XPath expression. Пример: /data/table - выбрать элемент table лежащий в корне. Пример: //table - выбрать элемент table где попало- Parameters:
node
-expression
- XPath expression- Returns:
- Node, если найден - иначе null
-
selectElements
Итератор элементов nodelist по XPath. Пример: /tables/* - выбрать все элементы внутри родительского tables в корне. -
elements
Делает Iterable от Element из NodeList, для удобного обхода.- Parameters:
nodeList
- исходный NodeList- Returns:
- Iterable<Element>.
-
selectText
Выборка строкового значения по xpath. Дефолт валуе - null.- See Also:
-
selectText
Выборка строкового значения по 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
- xpathdefaultValue
- значение по умолчанию- Returns:
- строка
- See Also:
-
getAttribute
Получение аттрибута элемента. Когда нет аттрибута - возвращает null.- Parameters:
element
- элементname
- имя аттрибута- Returns:
- строка значение аттрибута (или нулл)
-
getAttribute
Получение аттрибута элемента. Сделана ввиду дурацкой domовской привычки доставать несуществующие принципиально аттрибуты как пустые строки, что не может меня не волновать при реализации некоторых задумок, пусть когда нет аттрибута - возвращает defaultValue.- Parameters:
element
- элементname
- имя аттрибутаdefaultValue
- значение по умолчанию.- Returns:
- строка значение аттрибута (или значение по умолчанию)
-
getEnumAttribute
Получение аттрибута представляющего строковое значение enum-типа- Type Parameters:
E
- тип, представляющий enum (!)- Parameters:
element
- dom-элементname
- имя аттрибутаdefaultValue
- значение по умолчанию, отсюда же берётся тип/класс (генерик же используется, чтобы отдельно тип не передавать)- Returns:
- значение emun-типа или значение по умолчанию
-
getAttributeIntValue
Возвращает целочисленное значение атрибута.- Parameters:
node
-name
-defaultValue
-- Returns:
-
attributesToMap
Deprecated.используйте обертку изParameterMap
вокругElement
//TODO: Выяснить что за обертка и заменить на нее!- Parameters:
element
-- Returns:
-
attributesToParameterMap
-
serialize
Сериализует в выходной поток с указанием кодировки. Без отступов.- Parameters:
node
- нода (обычно Document)os
- OutputStreamencoding
- кодировка (и документа и представления в байтовой строке)
-
serialize
Сериализует XML документ.- Parameters:
node
- - узел документа.result
- - объект с результатом (если надо во Writer, то обернуть в StreamResult).encoding
- - кодировка, может быть null.indent
- - форматирование (отступы).
-
serializeToString
- Parameters:
node
- нода (обычно xml-документ)indent
- есть отступы или нет- Returns:
- содержимое xml документа в виде строки, в uft-8, с отступами (при indent=true) и с начальным xml-declaration
-
getSerializeProperties
можно добавить properties.put( OutputKeys.OMIT_XML_DECLARATION, "yes" );- Parameters:
encoding
-indent
-- Returns:
-
serialize
-
prepareElementToSerialize
Подготавливает элемент к XML сериализации, заменяет запрещённые символы на \\u{code}. Используется в местах, где возможно появление недопустимых XML символов.- Parameters:
el
- исходный элемент в теле, названии, дочерних элементах и атрибутах возможны запрещённые символы.
-
prepareString
Подготавливает строки к 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
-
ParameterMap
вокругElement
//TODO: Выяснить что за обертка и заменить на нее!