Question

J'essaie de déterminer si un élément XML existe avec XmlSlurper de Groovy. Y a-t-il un moyen de faire cela? Par exemple:

<foo>
  <bar/>
</foo>

Comment vérifier si l'élément bar existe?

Était-ce utile?

La solution

L'API est un peu taraudeuse, mais je pense qu'il y a deux ou trois meilleures façons de rechercher des enfants. Qu'est-ce que vous obtenez lorsque vous demandez & "; Xml.bar &"; (qui existe) ou & "; xml.quux &"; Ce qui n’est pas le cas est un groovy.util.slurpersupport.NodeChildren objet. Fondamentalement, une collection de nœuds répondant aux critères que vous avez demandés.

Une façon de voir si un noeud particulier existe est de vérifier que la taille du NodeChildren est la taille attendue:

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert 1 == xml.bar.size()
assert 0 == xml.quux.size()

Vous pouvez également utiliser la méthode find pour voir si le nom du nœud renvoyé (malheureusement, quelque chose est toujours renvoyé) est celui que vous attendiez:

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert ("bar" == xml.children().find( {it.name() == "bar"})?.name())
assert ("quux" != xml.children().find( {it.name() == "quux"})?.name())

Autres conseils

La méthode isEmpty sur GPathResult fonctionne.

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert false == xml.bar.isEmpty()

Cela me gêne, car l'élément de barre est vide - il n'a pas de corps. Mais je suppose que GPathResult n'est pas vide, alors peut-être que cela a du sens.

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