cod*_*orn 10 xml grails groovy parsing 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
Run Code Online (Sandbox Code Playgroud)
这个片段的输出是
# sudo make me a sandwich!
Run Code Online (Sandbox Code Playgroud)
似乎解析器合并了<bar>
和的内容<weird:bar>
.
是否需要这种行为,如果是,我该如何避免这种情况并仅选择<bar>
或<weird:bar>
?
Kai*_*nad 17
默认情况下,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!"
Run Code Online (Sandbox Code Playgroud)
输出是:
sudo make me a sandwich!
sudo
make me a sandwich!
Run Code Online (Sandbox Code Playgroud)
第一个println
仍然不会识别名称空间.第二个println
只打印没有命名空间的标签.如果使用第三个中显示的前缀限定元素,println
则只获取命名空间标记.
归档时间: |
|
查看次数: |
10591 次 |
最近记录: |