Groovy XmlSlurper 中的父节点

Parent node in Groovy XmlSlurper

我正在使用 Groovy / XmlSlurper 读取 XML 文档的父节点,例如以下程序:

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()

我希望输出为:

1.) Name book                            = book
2.) Name book.parent()                   = books
3.) Name book.parent().parent()          = list
4.) Name book.parent().parent().parent() = Null

然而,我得到了一个不同的、奇怪的结果(特别是,我希望第 4 行是 Null/empty,但似乎我是 运行 在圈子里......):

1.) Name book                            = book
2.) Name book.parent()                   = books
3.) Name book.parent().parent()          = book
4.) Name book.parent().parent().parent() = books

我的错误在哪里?

提前感谢您的帮助

添加 book[0].parent() 就可以了

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()

原因-xml.books.bookreturns你一个清单book


恕我直言:我更喜欢使用 XmlParser 而不是 XmlSlurper - 它更严格并且会给你的原始代码带来非常明显的错误。