2012-03-14 75 views
1

我正在使用XMLSlurper。我的代碼在下面(但不起作用)。問題在於,它遇到沒有屬性「id」的節點時會失敗。我如何解釋這一點?如何找到在groovy中具有特定值的節點的文本?

//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」屬性的節點,所以它不會失敗。我怎麼做?

回答

0

當我簡單地使用depthFirst的時候,我可以讓它工作。所以:

properties[ "finalValue" ] = page.depthFirst().find { 
    it.attributes().find { it.key.equalsIgnoreCase('id') }.value == "myNode" 
}; 
1

你可以選擇使用的GPATH符號,並檢查「@id」是空的第一次。

下面的代碼片段查找最後一個元素(因爲id屬性是「B」,值也是「bizz」,它打印出「bizz」和「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{[email protected]() && it.text()=="bizz"} 
println x 
println [email protected] 
相關問題