Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“Groovy”;查找“;闭包…遍历递归xml_Xml_Parsing_Loops_Groovy_Gpath - Fatal编程技术网

“Groovy”;查找“;闭包…遍历递归xml

“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>

如果我的GPath是这样的:

<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"