Groovyの属性に特定の値を持つノードのテキストをどのように見つけるのでしょうか。

StackOverflow https://stackoverflow.com//questions/9709807

質問

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」属性なしでノードを考慮する必要があるため、失敗しないようにしてください。どうやってそうするのですか?

役に立ちましたか?

解決 2

早くDepthfirstを使用するときは、それを機能させることができます。そのため:

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

他のヒント

あるいは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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top