Come troverei il testo di un nodo che ha un valore specifico per un attributo in Groovy?
-
14-12-2019 - |
Domanda
Sto usando xmlsluurper.Il mio codice è sotto (ma non funziona).Il problema è che fallisce quando colpisce un nodo che non ha l'attributo "ID".Come posso spiegare questo?
//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"
};
.
Ho solo bisogno di spiegare i nodi senza attributo "ID", quindi non funziona.Come faccio a farlo?
Soluzione 2
Apperentemente posso farlo funzionare quando usi semplicemente DecidentFirst.Quindi:
properties[ "finalValue" ] = page.depthFirst().find {
it.attributes().find { it.key.equalsIgnoreCase( 'id' ) }.value == "myNode"
};
. Altri suggerimenti
È possibile utilizzare in alternativa la notazione GPATS e controllare se "@ID" è vuoto prima.
Il seguente snippet di codice trova l'ultimo elemento (dal momento che l'attributo id è "B" e il valore è anche "Bizz", stampa "Bizz" e "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
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow