def xml = '''
<list>
<cars>
<model>2012</model>
<make>GM</make>
<color>Gold</color>
</cars>
</list>
'''
def item = new XmlSlurper().parseText(xml)
item.'**'.inject([]) { acc, val ->
def localText = val.localText()
acc << val.name()
if( localText ) {
println "${acc.join('/')} : ${localText.join(',')}"
acc = acc.dropRight(1) // or acc = acc[0..-2]
}
acc
}
这将根据需要打印。上面是depthFirst()
在树上使用搜索并使用注入(只是不要改变任何其他列表)并查找localText()
. 如果localText()
遇到指示叶节点的值,则打印路径和值。该路径已累积在用于注入的列表中。一个简单join()
的将给出所需的格式。
以上已在 Groovy 2.4.5 中成功测试。如果localText()
不可用,NodeChild
那么早于 2.3.0 的 Groovy 版本将是原因,因为自 2.3.0 以来已添加该方法