Comment trouver le texte d'un nœud qui a une valeur spécifique pour un attribut à Groovy?
-
14-12-2019 - |
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?
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