Information
Java has in-built support for DOM processing of XML using classes representing the various parts of XML documents, e.g. Document, Element, NodeList, Attr etc. For more information about these classes, refer to the respective JavaDocs. Some of the key classes are:
Groovy syntax benefits can be applied when using these classes resulting in code which is similar to but more compact than the Java equivalent. In addition, Groovy supports the following built-in helper method for these classes.
DOM class |
Method |
Description/Equivalent longhand |
|---|---|---|
NodeList |
.iterator() |
same as for loop, enables closures, e.g. findAll, every, etc. |
In addition, the DOMCategory class provides numerous additional helper methods and syntax shortcuts:
DOM class |
Method |
Description/Equivalent longhand |
|---|---|---|
Element |
.'child' or .child |
.getElementsByTagName('child') |
Element |
.'*' |
special case of above which finds all (nested) children |
Element |
.'@attr' |
.getAttribute('attr') |
Element |
.attributes() |
equivalent to .attributes returns a NamedNodeMap |
Element |
.text() |
.firstChild.nodeValue (or textContent if you are using Xerces) |
Element |
.name() |
.nodeName |
Element |
.parent() |
.parentNode |
Element |
.children() |
.childNodes (potentially including whitespace textnodes etc.) |
NodeList |
.size() |
.length |
NodeList |
.list() |
converted to a list of nodes |
NodeList |
[n] |
.item(n) |
NodeList |
.text() |
.collect{ it.text() } |
NodeList |
.child |
flattened version of .getElementsByTagName('child') for each node in the NodeList |
NamedNodeMap |
.size() |
.length |
NamedNodeMap |
.'child' or .child |
.getNamedItem(elementName).nodeValue |
All these methods return standard Java classes (e.g. String and List) or standard DOM classes (e.g. Element, NodeList), so there are no new classes to learn, just some improved syntax.
Example
This example assumes the following class is already on your CLASSPATH:
Here is an example of using Groovy's DOMCategory: