Package ru.bgcrm.util
Class XMLUtils
java.lang.Object
ru.bgcrm.util.XMLUtils
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidcreateTextNode(Node node, String text) Создание текстового узла - потомка.Делает Iterable от Element из NodeList, для удобного обхода.static StringgetAttribute(Element element, String name) Получение аттрибута элемента.static StringgetAttribute(Element element, String name, String defaultValue) Получение аттрибута элемента.static intgetAttributeIntValue(Node node, String name, int defaultValue) Возвращает целочисленное значение атрибута.static ElementgetElement(Document doc, String elementName) Ищет элемент в документе по имени.static StringgetElementText(Node node) Вытаскивает содержимое XML-элемента в виде строки вместе со всеми дочерними тегамиstatic <E extends Enum<E>>
EgetEnumAttribute(Element element, String name, E defaultValue) Получение аттрибута представляющего строковое значение enum-типаstatic NodeБерёт Node по имени тега из Document.static final DocumentСоздаёт и возвращает новый объект XML документ.static final ElementnewElement(Document parent, String name) Создать элемент на родительском документе.static final ElementnewElement(Element parent, String name) Создаёт объект-узел с заданным именем в родительском узле.static DocumentparseDocument(InputStream stream) static DocumentparseDocument(InputStream stream, boolean showError) static DocumentparseDocument(InputSource source) static DocumentparseDocument(InputSource source, boolean showError) static voidparseDocument(InputSource source, ContentHandler handler) static voidПодготавливает элемент к XML сериализации, заменяет запрещённые символы на \\u{code}.static StringprepareString(StringBuilder buf, String nodeValue) Подготавливает строки к XML сериализации, заменяет запрещённые символы на \\u{code}.static ElementselectElement(Node node, String expression) Возвращает элемент по XPath expression.selectElements(Node node, String expression) static NodeselectNode(Node node, String expression) Возвращает Node по XPath expression.static NodeListselectNodeList(Node node, String expression) Возвращает NodeList по XPath expression.static StringselectText(Node node, String expression) Выборка строкового значения по xpath.static StringselectText(Node node, String expression, String defaultValue) Выборка строкового значения по xpath.static voidserialize(Node node, OutputStream os, String encoding) Сериализует в выходной поток с указанием кодировки.static voidСериалует в Writer.static voidСериализует в Writer.static voidСериализует в Result, отступ - false.static voidstatic voidsetAttribute(Element element, String name, String value) Установка значения атрибута, только если оно не равно null.static voidТрансформация xml+xstl→выход
-
Field Details
-
slashPattern
-
-
Constructor Details
-
XMLUtils
public XMLUtils()
-
-
Method Details
-
getElementText
Вытаскивает содержимое XML-элемента в виде строки вместе со всеми дочерними тегами- Parameters:
node-- Returns:
-
newDocument
Создаёт и возвращает новый объект XML документ.- Returns:
-
newElement
Создаёт объект-узел с заданным именем в родительском узле.- Parameters:
parent- родительский узел.name- имя нового узла.- Returns:
-
newElement
Создать элемент на родительском документе. Ибо для Element версия ни при каких условиях не работает (OwnerDocument всегда null), не помогает и всякие getDocumentElement.- Parameters:
parent-name-- Returns:
-
createTextNode
Создание текстового узла - потомка. То есть "устанавливаем текст внутрь указанного нода". Если нод - /data, то будет <data>текст</data>- Parameters:
node- узелtext- текст
-
setAttribute
Установка значения атрибута, только если оно не равно null.- Parameters:
element- элементname- имя аттрибутаvalue- значение аттрибута
-
parseDocument
-
parseDocument
-
parseDocument
-
parseDocument
-
parseDocument
-
getElement
Ищет элемент в документе по имени. Если не находит - возвращает созданный.- Parameters:
doc-elementName-- Returns:
-
getNode
Берёт Node по имени тега из Document. В случае отсутствия - создаёт новый Node и возвращает его.- Parameters:
doc- документnodeName- имя узла- Returns:
- узел
- See Also:
-
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
-
selectNodeList
Возвращает NodeList по XPath expression.- Parameters:
node-expression- XPath expression- Returns:
- NodeList, если найден - иначе null
-
selectElements
-
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:
-
serialize
Сериализует в выходной поток с указанием кодировки.- Parameters:
node-os-encoding-
-
serialize
Сериалует в Writer. Обычно используется для отладки, так как правильнее использовать сериализацию в OutputStream.- Parameters:
node-writer-
-
serialize
Сериализует в Writer. Обычно используется для отладки, так как правильнее использовать сериализацию в OutputStream.- Parameters:
node-writer-
-
serialize
Сериализует в Result, отступ - false.- Parameters:
node-result-encoding-
-
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- кодировка, может быть null, тогда получается из шаблона.- Throws:
TransformerException- ошибка трансформации.
-