Package ru.bitel.common
Class XMLUtils
java.lang.Object
ru.bitel.common.XMLUtils
public class XMLUtils
extends java.lang.Object
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
XMLUtils.BGXMLEventReader
static class
XMLUtils.XMLEventReaderParameterMap
static class
XMLUtils.XMLStreamReaderParameterMap
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.String
ELEMENT_NAME_ITEM
protected static java.lang.String
ELEMENT_NAME_LIST
protected static java.lang.String
ELEMENT_NAME_ROW
protected static java.util.regex.Pattern
slashPattern
-
Constructor Summary
Constructors Constructor Description XMLUtils()
-
Method Summary
Modifier and Type Method Description static org.w3c.dom.Element
addListItem(org.w3c.dom.Node node, int id, java.lang.String title)
static org.w3c.dom.Element
addListItem(org.w3c.dom.Node node, java.lang.String id, java.lang.String title)
static org.w3c.dom.Element
addListItem(org.w3c.dom.Node node, java.lang.String nameNode, java.lang.String id, java.lang.String title)
static java.util.Map<java.lang.String,java.lang.String>
attributesToMap(org.w3c.dom.Element element)
Deprecated.static ParameterMap
attributesToParameterMap(org.w3c.dom.Element element)
static org.w3c.dom.Element
createElement(org.w3c.dom.Document parent, java.lang.String name)
Создать элемент на родительском документе.static org.w3c.dom.Element
createElement(org.w3c.dom.Element parentElement, java.lang.String name)
Создание нового элемента и добавление его в родительский элементstatic org.w3c.dom.Element
createElementNS(org.w3c.dom.Document parent, java.lang.String xmlns, java.lang.String name)
Создать элемент на родительском документе c заданным xmlns, добавляя его как дочерний.static org.w3c.dom.Element
createListElement(org.w3c.dom.Element parentElement, java.lang.String name, java.lang.String itemName, java.util.List<?> list, java.lang.Class<?> clazz, java.lang.String[] fields)
static org.w3c.dom.Element
createListElement(org.w3c.dom.Element parentElement, java.lang.String name, java.util.List<?> list, java.lang.Class<?> clazz)
Вызов createListElement( parentElement, name, list, clazz, null );static org.w3c.dom.Element
createListElement(org.w3c.dom.Element parentElement, java.lang.String name, java.util.List<?> list, java.lang.Class<?> clazz, java.lang.String[] fields)
Генерация Элемента содержащего список объектов со значениями свойств в виде аттрибутов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 java.lang.String
escapeXmlNotValid(java.lang.StringBuilder buf, java.lang.String value)
static org.w3c.dom.Element
findElement(org.w3c.dom.Node el, java.lang.String elementName)
Deprecated.static java.lang.String
getAttribute(org.w3c.dom.Element element, java.lang.String name)
Получение аттрибута элемента.static java.lang.String
getAttribute(org.w3c.dom.Element element, java.lang.String name, java.lang.String defaultValue)
Получение аттрибута элемента.static int
getAttributeIntValue(org.w3c.dom.Node node, java.lang.String name, int defaultValue)
Возвращает целочисленное значение атрибута.static org.w3c.dom.Element
getElement(org.w3c.dom.Document doc, java.lang.String elementName)
Ищет элемент в документе по имени.static <E extends java.lang.Enum<E>>
EgetEnumAttribute(org.w3c.dom.Element element, java.lang.String name, E defaultValue)
Получение аттрибута представляющего строковое значение enum-типаstatic int
getIntAttribute(org.w3c.dom.Element element, java.lang.String name, int defaultValue)
Deprecated.используйте обертку изParameterMap
вокруг Element для парсинга //TODO: Выяснить что за обертка и заменить на нее!static org.w3c.dom.Node
getNode(org.w3c.dom.Document doc, java.lang.String nodeName)
Берёт Node по имени тега из Document.static java.util.Properties
getSerializeProperties(java.lang.String encoding, boolean indent)
можно добавить properties.put( OutputKeys.OMIT_XML_DECLARATION, "yes" );static void
main(java.lang.String[] args)
static org.w3c.dom.Document
newDocument()
Создаёт и возвращает новый объект XML документ.static XMLUtils.BGXMLEventReader
newXMLEventReader(java.io.InputStream is)
static XMLUtils.BGXMLEventReader
newXMLEventReader(java.io.Reader reader)
static XMLUtils.BGXMLEventReader
newXMLEventReader(javax.xml.stream.XMLInputFactory xmlif, java.io.InputStream is)
static XMLUtils.BGXMLEventReader
newXMLEventReader(javax.xml.stream.XMLInputFactory xmlif, java.io.Reader reader)
static javax.xml.stream.XMLInputFactory
newXMLInputFactory()
static org.w3c.dom.Document
parseDocument(byte[] data)
static org.w3c.dom.Document
parseDocument(byte[] data, boolean showError)
static org.w3c.dom.Document
parseDocument(java.lang.String data)
парсинг документов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)
Итератор элементов nodelist по XPath.static org.w3c.dom.Node
selectNode(org.w3c.dom.Node node, java.lang.String expression)
Возвращает Node по 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 node, java.io.OutputStream os, java.lang.String encoding)
Сериализует в выходной поток с указанием кодировки.static void
serialize(org.w3c.dom.Node node, java.io.Writer writer)
Сериалует в Writer.static void
serialize(org.w3c.dom.Node node, java.io.Writer writer, java.lang.String encoding)
Сериализует в Writer.static void
serialize(org.w3c.dom.Node node, javax.xml.transform.Result result, java.lang.String encoding)
Сериализует в Result, отступ - false.static void
serialize(org.w3c.dom.Node node, javax.xml.transform.Result result, java.lang.String encoding, boolean indent)
Сериализует XML документ.static void
serialize(org.w3c.dom.Node node, javax.xml.transform.Result result, java.util.Properties properties)
static void
setAttribute(org.w3c.dom.Element element, java.lang.String name, java.lang.String value)
Установка значения атрибута, только если оно не равно null.static void
setPageAttribute(org.w3c.dom.Element element, Page page)
static java.util.List<org.w3c.dom.Element>
toList(java.lang.Iterable<org.w3c.dom.Element> elements)
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
-
Field Details
-
ELEMENT_NAME_ROW
protected static final java.lang.String ELEMENT_NAME_ROW- See Also:
- Constant Field Values
-
ELEMENT_NAME_ITEM
protected static final java.lang.String ELEMENT_NAME_ITEM- See Also:
- Constant Field Values
-
ELEMENT_NAME_LIST
protected static final java.lang.String ELEMENT_NAME_LIST- See Also:
- Constant Field Values
-
slashPattern
protected static final java.util.regex.Pattern slashPattern
-
-
Constructor Details
-
XMLUtils
public XMLUtils()
-
-
Method Details
-
newXMLInputFactory
public static final javax.xml.stream.XMLInputFactory newXMLInputFactory() -
newXMLEventReader
-
newXMLEventReader
-
newXMLEventReader
public static final XMLUtils.BGXMLEventReader newXMLEventReader(javax.xml.stream.XMLInputFactory xmlif, java.io.Reader reader) -
newXMLEventReader
public static final XMLUtils.BGXMLEventReader newXMLEventReader(javax.xml.stream.XMLInputFactory xmlif, java.io.InputStream is) -
newDocument
public static final org.w3c.dom.Document newDocument()Создаёт и возвращает новый объект XML документ.- Returns:
-
createElement
public static final org.w3c.dom.Element createElement(org.w3c.dom.Document parent, java.lang.String name)Создать элемент на родительском документе. Ибо для Element версия ни при каких условиях не работает (OwnerDocument всегда null), не помогает и всякие getDocumentElement.- Parameters:
parent
-name
-- Returns:
-
createElement
public static org.w3c.dom.Element createElement(org.w3c.dom.Element parentElement, java.lang.String name)Создание нового элемента и добавление его в родительский элементelement = parentElement.getOwnerDocument().createElement( name ); parentElement.appendChild( element );
- Parameters:
parentElement
- родительский элементname
- имя нового элемента- Returns:
- новый элемент
-
createElementNS
public static final org.w3c.dom.Element createElementNS(org.w3c.dom.Document parent, java.lang.String xmlns, java.lang.String name)Создать элемент на родительском документе c заданным xmlns, добавляя его как дочерний.... - Parameters:
parent
- документxmlns
- неймспейс (если null, то будет просто без ns)name
- имя элемента- Returns:
- созданный элемент.
-
createTextNode
public static void createTextNode(org.w3c.dom.Node node, java.lang.String text)Создание текстового узла - потомка.node.appendChild( node.getOwnerDocument().createTextNode( text ) );
- Parameters:
node
- узел-предокtext
- текст
-
createListElement
public static org.w3c.dom.Element createListElement(org.w3c.dom.Element parentElement, java.lang.String name, java.util.List<?> list, java.lang.Class<?> clazz)Вызов createListElement( parentElement, name, list, clazz, null );- Parameters:
parentElement
- родительский элементname
- имя нового элементаlist
- список с объектами для постотроение списка элементовclazz
- класс объектов списка- Returns:
- корневой элемент списка
-
createListElement
public static org.w3c.dom.Element createListElement(org.w3c.dom.Element parentElement, java.lang.String name, java.util.List<?> list, java.lang.Class<?> clazz, java.lang.String[] fields)Генерация Элемента содержащего список объектов со значениями свойств в виде аттрибутов- Parameters:
parentElement
- родительский элементname
- имя нового элементаlist
- список с объектами для постотроение списка элементовclazz
- класс объектов спискаfields
- список свойств которые нужно добавлять в аттрибуты елементов списка- Returns:
- корневой элемент списка
-
createListElement
public static org.w3c.dom.Element createListElement(org.w3c.dom.Element parentElement, java.lang.String name, java.lang.String itemName, java.util.List<?> list, java.lang.Class<?> clazz, java.lang.String[] fields) -
addListItem
public static org.w3c.dom.Element addListItem(org.w3c.dom.Node node, int id, java.lang.String title) -
addListItem
public static org.w3c.dom.Element addListItem(org.w3c.dom.Node node, java.lang.String id, java.lang.String title) -
addListItem
public static org.w3c.dom.Element addListItem(org.w3c.dom.Node node, java.lang.String nameNode, java.lang.String id, java.lang.String title) -
setPageAttribute
-
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.lang.String data)парсинг документов- Parameters:
stream
-- Returns:
-
parseDocument
public static org.w3c.dom.Document parseDocument(byte[] data) -
parseDocument
public static org.w3c.dom.Document parseDocument(byte[] data, 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(org.w3c.dom.Node,java.lang.String)
-
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
-
selectElements
public static java.lang.Iterable<org.w3c.dom.Element> selectElements(org.w3c.dom.Node node, java.lang.String expression)Итератор элементов nodelist по XPath. Пример: /tables/* - выбрать все элементы внутри родительского tables в корне. -
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
- xpathdefaultValue
- значение по умолчанию- Returns:
- строка
- See Also:
selectNode(org.w3c.dom.Node, java.lang.String)
-
findElement
@Deprecated public static org.w3c.dom.Element findElement(org.w3c.dom.Node el, java.lang.String elementName)Deprecated.Поиск дочернего элемента в Node(элементе/документе). Подразумевается, что он там один, т.к. всё равно берётся первый найденный. По умолчанию также ищется и рекурсивно ниже по дереву.
Don't use it anymore!- Parameters:
el
- NodeelementName
- имя дочернего искомого элемента.- Returns:
- найденный Element или null, если не найдено
-
getAttribute
public static java.lang.String getAttribute(org.w3c.dom.Element element, java.lang.String name)Получение аттрибута элемента. Когда нет аттрибута - возвращает null.- Parameters:
element
- элементname
- имя аттрибута- Returns:
- строка значение аттрибута (или нулл)
-
getAttribute
public static java.lang.String getAttribute(org.w3c.dom.Element element, java.lang.String name, java.lang.String defaultValue)Получение аттрибута элемента. Сделана ввиду дурацкой domовской привычки доставать несуществующие принципиально аттрибуты как пустые строки, что не может меня не волновать при реализации некоторых задумок, пусть когда нет аттрибута - возвращает defaultValue.- Parameters:
element
- элементname
- имя аттрибутаdefaultValue
- значение по умолчанию.- Returns:
- строка значение аттрибута (или значение по умолчанию)
-
getIntAttribute
@Deprecated public static int getIntAttribute(org.w3c.dom.Element element, java.lang.String name, int defaultValue)Deprecated.используйте обертку изParameterMap
вокруг Element для парсинга //TODO: Выяснить что за обертка и заменить на нее!Получение целого аттрибута. Если нету аттрибута, либо он есть но не является корректным int - возвращается дефолтовое значение.- Parameters:
element
- элементname
- имя аттрибутаdefaultValue
- дефолт- Returns:
- строка значение аттрибута (или значение по умолчанию)
-
getEnumAttribute
public static <E extends java.lang.Enum<E>> E getEnumAttribute(org.w3c.dom.Element element, java.lang.String name, E defaultValue)Получение аттрибута представляющего строковое значение enum-типа- Type Parameters:
E
- тип, представляющий enum (!)- Parameters:
element
- dom-элементname
- имя аттрибутаdefaultValue
- значение по умолчанию, отсюда же берётся тип/класс (генерик же используется, чтобы отдельно тип не передавать)- Returns:
- значение emun-типа или значение по умолчанию
-
getAttributeIntValue
public static int getAttributeIntValue(org.w3c.dom.Node node, java.lang.String name, int defaultValue)Возвращает целочисленное значение атрибута.- Parameters:
node
-name
-defaultValue
-- Returns:
-
attributesToMap
@Deprecated public static java.util.Map<java.lang.String,java.lang.String> attributesToMap(org.w3c.dom.Element element)Deprecated.используйте обертку изParameterMap
вокругElement
//TODO: Выяснить что за обертка и заменить на нее!- Parameters:
element
-- Returns:
-
attributesToParameterMap
-
serialize
public static void serialize(org.w3c.dom.Node node, java.io.OutputStream os, java.lang.String encoding)Сериализует в выходной поток с указанием кодировки.- Parameters:
node
-os
-encoding
-
-
serialize
public static void serialize(org.w3c.dom.Node node, java.io.Writer writer)Сериалует в Writer. Обычно используется для отладки, так как правильнее использовать сериализацию в OutputStream.- Parameters:
node
-writer
-
-
serialize
public static void serialize(org.w3c.dom.Node node, java.io.Writer writer, java.lang.String encoding)Сериализует в Writer. Обычно используется для отладки, так как правильнее использовать сериализацию в OutputStream.- Parameters:
node
-writer
-
-
serialize
public static void serialize(org.w3c.dom.Node node, javax.xml.transform.Result result, java.lang.String encoding)Сериализует в Result, отступ - false.- Parameters:
node
-result
-encoding
-
-
serialize
public static void serialize(org.w3c.dom.Node node, javax.xml.transform.Result result, java.lang.String encoding, boolean indent)Сериализует XML документ.- Parameters:
node
- - узел документа.result
- - объект с результатом.encoding
- - кодировка, может быть null.indent
- - форматирование (отступы).
-
getSerializeProperties
public static java.util.Properties getSerializeProperties(java.lang.String encoding, boolean indent)можно добавить properties.put( OutputKeys.OMIT_XML_DECLARATION, "yes" );- Parameters:
encoding
-indent
-- Returns:
-
serialize
public static void serialize(org.w3c.dom.Node node, javax.xml.transform.Result result, java.util.Properties properties) -
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
- кодировка.- Throws:
javax.xml.transform.TransformerException
- ошибка трансформации.
-
toList
public static java.util.List<org.w3c.dom.Element> toList(java.lang.Iterable<org.w3c.dom.Element> elements) -
escapeXmlNotValid
public static java.lang.String escapeXmlNotValid(java.lang.StringBuilder buf, java.lang.String value) -
main
public static void main(java.lang.String[] args)
-
ParameterMap
вокругElement
//TODO: Выяснить что за обертка и заменить на нее!