如果我有这样的GPath:
<Apple>
<Mango>
<id>5 </id>
</Mango>
<Mango>
<id>10 </id>
</Mango>
</Apple>
要获得一个id为5的芒果,我会这样做,
GPathResult result = Apple.find{
it.Mango.id=5
}
但是如果我的GPath是递归的。我的意思是,一个苹果可以有一个芒果。芒果可以再加一个苹果。例如:
<Apple>
<Mango>
<id>10</id>
<Apple>
<Mango>
<id>5 </id>
</Mango>
</Apple>
</Mango>
</Apple>
如何获得id为'5'的芒果。无论递归,GPath可能是(具有id为'5'的芒果可以处于任何级别的递归),我需要找到id为'5'的芒果。如何通过find闭包来实现这一目标?
提前谢谢
答案 0 :(得分:2)
您可以根据与您的结构最匹配的内容使用breadthFirst或depthFirst:
def xml = '''<Apple>
<Mango>
<id>10</id>
<Apple>
<Mango found="correct">
<id>5</id>
</Mango>
</Apple>
</Mango>
</Apple>'''
nodes = new XmlParser().parseText xml
mango = nodes.breadthFirst().find { it.id.text() == "5" }
assert mango.@found == "correct"