Разбор 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
Это просто обёртка для имени и области имён, с учётом префикса.