По умолчанию XMLSlurper не поддерживает пространство имен. Это можно включить, объявив пространства имен с помощью declareNamespace
метода .
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!"
Вывод:
sudo make me a sandwich!
sudo
make me a sandwich!
Первый println
все еще не будет осведомлен о пространстве имен. Второй println
будет печатать только тег без пространства имен. Если вы квалифицируете элемент с префиксом, показанным в третьем println
, вы получите только тег пространства имен.