Namespace-handling in Groovys XmlSlurper
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
Die Ausgabe dieses snippets ist
# sudo make me a sandwich!
Scheint es, wie der parser überführt den Inhalt <bar>
und <weird:bar>
.
Ist dieses Verhalten gewünscht wird und wenn ja, wie kann ich diese vermeiden, und wählen Sie nur <bar>
oder <weird:bar>
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig XMLSlurper ist nicht namespace-aware. Dieser kann eingeschaltet werden, indem die Deklaration von namespaces mit der
declareNamespace
Methode.Ausgabe:
Den ersten
println
noch nicht namespace-aware. Die zweiteprintln
wird nur drucken, die Tags ohne namespace. Wenn Sie qualifizieren element mit dem Präfix gezeigt, in der Drittenprintln
Sie erhalten nur die Namespace-tag.println xml.':bar'
abgesehen von parsing der root-element für namespaces und deklarieren Sie?new XmlSlurper() -> new XmlSlurper(false, true)
: stackoverflow.com/questions/33418826/...Ich weiß, das beantwortet war eine Weile her, aber hier ist eine alternative für jemand anderes vor dem gleichen Problem. Die
XmlSlurper
Klasse besitzt drei Konstruktoren, ein paar von denen können Sie angeben, Sie wollen es Namespaces.Erklären die slurper durch den Aufruf
new XmlSlurper(false, true)
.Ich hoffe, dies ist nützlich, um andere.