“Groovy”;查找“;闭包…遍历递归xml
如果我的GPath是这样的:“Groovy”;查找“;闭包…遍历递归xml,xml,parsing,loops,groovy,gpath,Xml,Parsing,Loops,Groovy,Gpath,如果我的GPath是这样的: <Apple> <Mango> <id>5 </id> </Mango> <Mango> <id>10 </id> </Mango> </Apple> 但是如果我的GPath是递归的。我的意思是,一个苹果可以有一个芒果。一个芒果也可以有一个苹果在里面。例如: <Apple>
<Apple>
<Mango>
<id>5 </id>
</Mango>
<Mango>
<id>10 </id>
</Mango>
</Apple>
但是如果我的GPath是递归的。我的意思是,一个苹果可以有一个芒果。一个芒果也可以有一个苹果在里面。例如:
<Apple>
<Mango>
<id>10</id>
<Apple>
<Mango>
<id>5 </id>
</Mango>
</Apple>
</Mango>
</Apple>
10
5.
如何获得id为“5”的芒果。然而,GPath可能是递归的(id为'5'的Mango可以是任何级别的递归),我需要找到id为'5'的Mango。如何通过find闭包实现这一点
提前感谢您可以根据最适合您的结构使用或:
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"
defxml=''
10
5.
'''
节点=新的XmlParser().parseText xml
mango=nodes.breadthFirst().find{it.id.text()=“5”}
断言芒果。@found==“正确”
似乎是个傻瓜,有一个相当好的答案。嗨,比尔,我是一个非常棒的新手..我不太理解那条线索中的答案。我们可以不使用地图做同样的事情吗?你应该可以,结构应该是相同的,但我还没有做过确定的工作。尝试一下——复制代码,让它按原样工作,然后将类型更改为您想要的类型,看看是否可以让它工作。即使它不能直接帮助你,它也应该教会你足够多的东西,让你自己解决问题。
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"