Namespace Handling in Groovys XmlSlurper

stimmen
38

Die 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

Der Ausgang dieses Snippet ist

# sudo make me a sandwich!

Es scheint , wie der Parser den Inhalt übergeht <bar>und <weird:bar>.

Ist dieses Verhalten gewünscht , und wenn ja, wie kann ich dies vermeiden , und wählen Sie nur <bar>oder <weird:bar>?

Veröffentlicht am 29/12/2011 um 13:31
vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
17

Standardmäßig XMLSlurper ist nicht Namespace bewusst. Dies kann , indem er erklärt Namespaces mit dem eingeschaltet werden declareNamespace Methode .

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!"

Die Ausgabe lautet:

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

Der erste printlnWille ist noch nicht Namespace bewusst. Der zweite printlndruckt nur das Tag ohne Namespace. Wenn Sie Element mit dem im dritten gezeigten Präfix qualifizieren printlnerhalten Sie nur den Namespace - Tag.

Beantwortet am 29/12/2011 um 14:13
quelle vom benutzer

stimmen
2

Ich weiß , das vor einiger Zeit beantwortet wurde, aber hier ist eine Alternative für jemand anderes das gleiche Problem gegenüber . Die XmlSlurperKlasse hat drei Konstrukteure, ein paar davon können Sie Sie festlegen , es Namespace-aware sein wollen.

public XmlSlurper(boolean validating, boolean namespaceAware)

Deklarieren Sie die slurper durch den Aufruf new XmlSlurper(false, true). Ich hoffe , dass dies für andere nützlich ist.

Beantwortet am 24/10/2017 um 16:32
quelle vom benutzer

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