我使用的是XMLSlurper。我的代码在下面(但不起作用)。问题是,当它遇到一个没有属性"id"的节点时,它会失败。我该如何解释?
//Parse XML
def page = new XmlSlurper(false,false).parseText(xml)
//Now save the value of the proper node to a property (this fails)
properties[ "finalValue" ] = page.find {
it.attributes().find { it.key.equalsIgnoreCase( 'id' ) }.value == "myNode"
};
我只需要考虑没有"id"属性的节点,这样它就不会失败。我该怎么做?
您也可以使用GPath表示法,并首先检查"@id"是否为空。
下面的代码片段找到最后一个元素(由于id属性是"B",值也是"bizz",所以它会打印出"bizz"one_answers"B")。
def xml = new XmlSlurper().parseText("<foo><bar>bizz</bar><bar id='A'>bazz</bar><bar id='B'>bizz</bar></foo>")
def x = xml.children().find{!it.@id.isEmpty() && it.text()=="bizz"}
println x
println x.@id
当我简单地使用depthFirst时,我可以让它正常工作。因此:
properties[ "finalValue" ] = page.depthFirst().find {
it.attributes().find { it.key.equalsIgnoreCase( 'id' ) }.value == "myNode"
};