Wie kann ich mit XmlSlurper abgefahrenen für die Existenz eines Element überprüfen?

StackOverflow https://stackoverflow.com/questions/480431

  •  20-08-2019
  •  | 
  •  

Frage

Ich versuche, um zu bestimmen, ob ein XML-Element mit Groovy XmlSlurper existiert. Gibt es eine Möglichkeit, dies zu tun? Zum Beispiel:

<foo>
  <bar/>
</foo>

Wie kann ich überprüfen, ob das Stabelement vorhanden ist?

War es hilfreich?

Lösung

Die API ist ein wenig verrückt, aber ich denke, dass es ein paar besseren Möglichkeiten für Kinder zu kümmern. Was Sie bekommen, wenn Sie für „xml.bar“ fragen oder „xml.quux“ (was existiert), die nicht der Fall ist, ist ein groovy.util.slurpersupport.NodeChildren Objekt. Im Grunde eine Sammlung von Knoten, die die Kriterien, die Sie gefragt.

Eine Möglichkeit, um zu sehen, ob ein bestimmte Knoten vorhanden ist für die Größe des NodeChildren zu überprüfen, ist die erwartete Größe:

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

Eine andere Möglichkeit wäre es, die find-Methode zu verwenden und sehen, ob der Name des Knotens, der zurückgegeben wird (leider etwas immer wieder), ist diejenige, die Sie erwartet haben:

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())

Andere Tipps

Die isEmpty Methode auf GPathResult funktioniert.

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

Das stört mich, weil das Stabelement ist leer - es hat keinen Körper. Aber ich nehme an, die GPathResult nicht leer ist, so vielleicht das macht Sinn.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top