Groovys XmlSlurper 中的命名空间处理
情况:
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
这个片段的输出是
# sudo make me a sandwich!
解析器似乎合并了
和
的内容。
是否需要这种行为?如果是,如何避免这种行为并仅选择
或
?
The 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
The output of this snippet is
# sudo make me a sandwich!
It seems like the parser merges the contents of <bar>
and <weird:bar>
.
Is this behavior desired and if yes, how can I avoid this and select only <bar>
or <weird:bar>
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
默认情况下,XMLSlurper 不支持命名空间。可以通过使用
declareNamespace
声明命名空间来打开此功能 方法。输出是:
第一个 println 仍然不支持命名空间。第二个
println
将只打印没有命名空间的标签。如果您使用第三个println
中显示的前缀来限定元素,您只会获得命名空间标记。By default XMLSlurper is not namespace aware. This can be turned on by declaring namespaces with the
declareNamespace
Method.The output is:
The first
println
will still not be namespace aware. The secondprintln
will only print the tag without namespace. If you qualify element with the prefix shown in the thirdprintln
you only get the namespaced tag.我知道这个问题不久前就得到了回答,但对于其他面临同样问题的人来说,这是一个替代方案。
XmlSlurper
类具有三个构造函数,其中几个允许您指定您希望它能够感知名称空间。通过调用 new XmlSlurper(false, true) 来声明 slurper。
我希望这对其他人有用。
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.Declare the slurper by calling
new XmlSlurper(false, true)
.I hope this is useful to others.