Question

J'utilise xmlsluper.Mon code est ci-dessous (mais ne fonctionne pas).Le problème est qu'il échoue quand il frappe un nœud qui n'a pas l'attribut "ID".Comment comptez-moi expliquer cela?

//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"
};

J'ai juste besoin de rendre compte des nœuds sans attribut "ID" afin qu'il n'échoue pas.Comment puis-je faire ça?

Était-ce utile?

La solution 2

Embrassement, je peux le faire fonctionner lorsque j'utilise simplement de la profondeurFirst.Donc:

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

Autres conseils

Vous pouvez également utiliser la notation GPATH et vérifier si "@ID" est vide d'abord.

L'extrait de code suivant trouve le dernier élément (puisque l'attribut ID est "B" et la valeur est aussi "BIZZ", elle imprime "BIZZ" et "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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top