Domanda

Sto cercando di determinare se esiste un elemento XML con XmlSlurper di Groovy. C'è un modo per fare questo? Ad esempio:

<foo>
  <bar/>
</foo>

Come posso verificare se esiste l'elemento bar?

È stato utile?

Soluzione

L'API è un po 'complicata, ma penso che ci siano un paio di modi migliori per cercare figli. Cosa ottieni quando chiedi & Quot; xml.bar & Quot; (che esiste) o " xml.quux " che non lo è, è un groovy.util.slurpersupport.NodeChildren oggetto. Fondamentalmente una raccolta di nodi che soddisfano i criteri richiesti.

Un modo per vedere se esiste un nodo particolare è verificare la dimensione di NodeChildren è la dimensione prevista:

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

Un altro modo sarebbe usare il metodo find e vedere se il nome del nodo che viene restituito (purtroppo viene sempre restituito qualcosa), è quello che ti aspettavi:

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

Altri suggerimenti

Il metodo isEmpty su GPathResult funziona.

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

Questo mi dà fastidio, perché l'elemento della barra è vuoto - non ha un corpo. Ma suppongo che GPathResult non sia vuoto, quindi forse questo ha senso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top