加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovys XmlSlurper中的命名空间处理

发布时间:2020-12-14 16:30:51 所属栏目:大数据 来源:网络整理
导读:情况: def str = """ foo xmlns:weird="http://localhost/" barsudo /bar weird:barmake me a sandwich!/weird:bar /foo"""def xml = new XmlSlurper().parseText(str)println xml.bar 这个代码段的输出是 # sudo make me a sandwich! 看来,解析器将 bar的
情况:

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!

看来,解析器将< bar>的内容合并和<奇怪的:bar>.

是否需要这个行为,如果是的话,我该如何避免这种情况,只能选择< bar>或“奇怪:酒吧”

解决方法

默认情况下,XMLSlurper不具有命名空间.这可以通过使用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!"

输出为:

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

第一个println仍然不会被命名空间感知.第二个println只打印没有命名空间的标签.如果您使用第三个println中显示的前缀限定元素,则只能获取命名空间的标签.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读