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?

È stato utile?

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
scroll top