Pregunta

Estoy tratando de determinar si existe un elemento XML con Groovy's XmlSlurper. ¿Hay alguna forma de hacer esto? Por ejemplo:

<foo>
  <bar/>
</foo>

¿Cómo verifico si el elemento de barra existe?

¿Fue útil?

Solución

La API es un poco complicada, pero creo que hay un par de formas mejores de buscar niños. Lo que obtienes cuando pides & Quot; xml.bar & Quot; (que existe) o " xml.quux " lo cual no es un groovy.util.slurpersupport.NodeChildren objeto. Básicamente, una colección de nodos que cumplen los criterios que solicitó.

Una forma de ver si existe un nodo en particular es verificar si el tamaño de NodeChildren es el tamaño esperado:

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

Otra forma sería utilizar el método find y ver si el nombre del nodo que se devuelve (desafortunadamente siempre se devuelve), es el que esperaba:

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

Otros consejos

El método isEmpty en GPathResult funciona.

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

Esto me molesta, porque el elemento de barra está vacío, no tiene cuerpo. Pero supongo que GPathResult no está vacío, así que tal vez esto tenga sentido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top