Groovyの属性に特定の値を持つノードのテキストをどのように見つけるのでしょうか。
-
14-12-2019 - |
質問
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
. 所属していません StackOverflow