Namespace handling in Groovys XmlSlurper Namespace handling in Groovys XmlSlurper xml xml

Namespace handling in Groovys XmlSlurper


By default XMLSlurper is not namespace aware. This can be turned on by declaring namespaces with the declareNamespace Method.

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

The output is:

sudo make me a sandwich!sudomake me a sandwich!

The first println will still not be namespace aware. The second println will only print the tag without namespace. If you qualify element with the prefix shown in the third println you only get the namespaced tag.


I know this was answered a while ago, but here's an alternative for anyone else facing the same issue. The XmlSlurper class has three constructors, a couple of which allow you to specify you want it to be namespace-aware.

public XmlSlurper(boolean validating, boolean namespaceAware)

Declare the slurper by calling new XmlSlurper(false, true).I hope this is useful to others.