Comment puis-je vérifier l'existence d'un élément avec Xmlslurper de Groovy?

j'essaie de déterminer s'il existe un élément XML avec Xmlslurper de Groovy. Est-il un moyen de faire cela? Par exemple:

<foo>
  <bar/>
</foo>

Comment puis-je vérifier si l'élément de la barre?

32
demandé sur Josh Brown 2009-01-26 19:39:38

2 réponses

L'API est un peu bizarre, mais je pense qu'il y a quelques meilleures façons de chercher des enfants. Ce que vous obtenez quand vous demandez "xml.barre " (qui existe) ou "xml.quux " qui ne fait pas, est un groovy.util.slurpersupport.NodeChildren objet. Essentiellement un ensemble 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 la taille des NodeChildren taille:

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

une Autre solution serait d'utiliser la méthode find et voir si le nom du nœud qui revient (malheureusement quelque chose est toujours retourné), 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())
36
répondu Ted Naleid 2009-01-27 03:40:15

La méthode isEmpty sur GPathResult œuvres.

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

cela me dérange, parce que l'élément de barre vide - il n'y a pas de corps. Mais je suppose que le GPathResult N'est pas vide, donc peut-être que cela a du sens.

17
répondu Josh Brown 2009-01-26 16:53:59