1

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」属性のないノードを考慮する必要があります。それ、どうやったら出来るの?

4

2 に答える 2

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{!it.@id.isEmpty() && it.text()=="bizz"}
println x
println x.@id
于 2012-03-14T21:48:40.360 に答える
0

見たところ、depthFirstを使用するだけで動作させることができます。それで:

properties[ "finalValue" ] = page.depthFirst().find {
    it.attributes().find { it.key.equalsIgnoreCase( 'id' ) }.value == "myNode"
};
于 2012-03-14T20:52:02.227 に答える