作者:何博弘朗 | 来源:互联网 | 2023-05-19 12:09
我有一个XML文档,其中包含具有限定名称的属性.我想使用XmlSlurper获取属性值,但尝试访问该属性而不指定命名空间不起作用(下面是一个最小的例子).
def rootNode = new XmlSlurper().parseText(
'''
Some text!
''' )
assert rootNode.one[0].@a1.text() == 'uno!'
rootNode.one[0].@a1.text()
将产生一个空字符串.如果使用rootNode.one[0].'@ex:a1'.text()
我们得到正确的值,但这取决于文档中使用的命名空间前缀 - 并且不能依赖于其他文档相同,关联的命名空间才是最重要的.
所以问题是:
如何使用XmlSlurper来访问具有关联命名空间的属性的属性值,而无需指定命名空间前缀?(如果需要提供整个命名空间,那就没关系)
1> jalopaba..:
我认为如果不指定这样的命名空间,就无法访问具有关联命名空间的属性.否则,只有"名称的本地部分"将用于保存属性的地图,导致像这样的旧bug(groovy 1.7.5).
也许最好的方法是groovy.xml.Namespace
使用它来访问属性:
import groovy.xml.Namespace
def xml = '''
Some text!
'''
def ns = new Namespace('http://example.com', 'ex')
def slurper = new XmlSlurper(false, true)
def slurped = slurper.parseText(xml)
assert 'uno!' == slurped.one[0].attributes()[ns.a1.toString()]
def parser = new XmlParser(false, true)
def parsed = parser.parseText(xml)
assert 'uno!' == parsed.one[0].attributes()[ns.a1]