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