la gestion des espaces de noms Groovys XmlSlurper

voix
38

La situation:

def str = 
  <foo xmlns:weird=http://localhost/>
    <bar>sudo </bar>
    <weird:bar>make me a sandwich!</weird:bar>
  </foo>

def xml = new XmlSlurper().parseText(str)
println xml.bar

La sortie de cet extrait est

# sudo make me a sandwich!

Il semble que l'analyseur fusionne le contenu <bar>et <weird:bar>.

Est - ce le comportement désiré et si oui, comment puis - je éviter cela et sélectionnez uniquement <bar>ou <weird:bar>?

Créé 29/12/2011 à 13:31
utilisateur
Dans d'autres langues...                            


2 réponses

voix
17

Par XmlSlurper par défaut est namespace pas au courant. Cela peut être activée en déclarant avec namespaces la declareNamespace méthode .

def str = """ 
<foo xmlns:weird="http://localhost/">
  <bar>sudo </bar>
  <weird:bar>make me a sandwich!</weird:bar>
</foo>
""" 
def xml = new XmlSlurper().parseText(str).declareNamespace('weird':'http://localhost/')
println xml.bar // without namespace awareness, will print "sudo make me a sandwich!"
println xml.':bar' // will only print "sudo"
println xml.'weird:bar' // will only print "make me a sandwich!"

La sortie est:

sudo make me a sandwich!
sudo
make me a sandwich!

La première printlnne sera pas encore au courant namespace. La seconde printlnimprime uniquement l'étiquette sans espace de noms. Si vous qualifiez élément avec le préfixe indiqué dans le troisième , printlnvous obtenez seulement la balise espaces de noms.

Créé 29/12/2011 à 14:13
source utilisateur

voix
2

Je sais que cela a répondu il y a un certain temps, mais voici une alternative pour toute personne confrontée à autre la même question. La XmlSlurperclasse a trois constructeurs, un couple dont vous permettent de vous spécifier voulez qu'il soit conscient de l' espace de noms.

public XmlSlurper(boolean validating, boolean namespaceAware)

Déclarer la slurper en appelant new XmlSlurper(false, true). J'espère que cela est utile aux autres.

Créé 24/10/2017 à 16:32
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more