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.book
returns你一个清单book
恕我直言:我更喜欢使用 XmlParser
而不是 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.book
returns你一个清单book
恕我直言:我更喜欢使用 XmlParser
而不是 XmlSlurper
- 它更严格并且会给你的原始代码带来非常明显的错误。