I am using Groovy / XmlSlurper to read parent nodes of an XML document, for example the following program:
import groovy.xml.*
def text = '''
<list>
<books>
<book available="20" id="1">
<title>Don Quixote</title>
<author>Miguel de Cervantes</author>
</book>
<book available="14" id="2">
<title>Catcher in the Rye</title>
<author>JD Salinger</author>
</book>
</books>
</list>
'''
def xml = new XmlSlurper().parseText(text)
def book = xml.books.book
println "1.) Name book = " + book.name()
println "2.) Name book.parent() = " + book.parent().name()
println "3.) Name book.parent().parent() = " + book.parent().parent().name()
println "4.) Name book.parent().parent().parent() = " + book.parent().parent().parent().name()
I expect the output to be:
1.) Name book = book
2.) Name book.parent() = books
3.) Name book.parent().parent() = list
4.) Name book.parent().parent().parent() = Null
However, I get a different, strange result (in particular, I expect line 4 to be Null/empty, but it seems that I am running in circles...):
1.) Name book = book
2.) Name book.parent() = books
3.) Name book.parent().parent() = book
4.) Name book.parent().parent().parent() = books
Where is my mistake ?
Thanks in advance for your help
adding book[0].parent()
will do the trick
println "1.) Name book = " + book[0].name()
println "2.) Name book.parent() = " + book[0].parent().name()
println "3.) Name book.parent().parent() = " + book[0].parent().parent().name()
println "4.) Name book.parent().parent().parent() = " + book[0].parent().parent().parent().name()
the reason - xml.books.book
returns you a list of book
IMHO: i prefer to use XmlParser
instead of XmlSlurper
- it's more stricted and will give you quite clear error for your original code.