Разбор XML на груви - rsugio/cpi GitHub Wiki

Парсеры: groovy.util.XmlParser и groovy.util.XmlSlurper

Первый возвращает Node, второй GPathResult.

Конструкторы одинаковые:

()
(boolean validating, boolean namespaceAware)
(XMLReader reader)
(SAXParser parser)

Вот таблица из Groovy in action:

groovy.util.Node GPathResult пояснения
Атомарный Список принципиально разные подходы
Object name() String name() для Node результат String или QName в зависимости от namespaceAware
String text() String text()
Node parent() GPathResult parent() есть вариант '..'
List children() GPathResult children() есть вариант '*'
Map attributes() Map attributes()
Iterator iterator() Iterator iterator()
List depthFirst() Iterator depthFirst() есть вариант '**'
List breadthFirst() Iterator breadthFirst()
['elementName'] ['elementName'] все дети с этим именем
.elementName .elementName аналогично предыдущей строке, короткий вариант
[index] [index] ребёнок по индексу
['@attributeName'] ['@attributeName'] один (?) атрибут с именем
.'@attributeName' .'@attributeName' аналогично предыдущей строке
.@attributeName .@attributeName аналогично предыдущей строке
нет `GPathResult parents() все родители по цепочке до корня, аналог descendant::* в XPath
нет `declareNamespace(Map mapping) зарегистрировать префиксы
нет `List list()
нет `int size()
нет `GPathResult find(Closure closure)
нет `GPathResult findAll(Closure closure)

Различия между парсерами

TODO

groovy.xml.QName

Это просто обёртка для имени и области имён, с учётом префикса.

groovy.xml.Node

Для слёрпера

groovy.util.slurpersupport.GPathResult, groovy.util.slurpersupport.NodeChild