Groovy XmlSlurper:获取具有关联命名空间的属性的值
发布时间:2020-12-14 16:28:49 所属栏目:大数据 来源:网络整理
导读:我有一个 XML文档,其中包含具有限定名称的属性.我想使用XmlSlurper获取属性值,但尝试访问该属性而不指定命名空间不起作用(下面是一个最小的例子). def rootNode = new XmlSlurper().parseText('''root xmlns:ex="http://example.com" one ex:a1="uno!"/ ex:t
我有一个
XML文档,其中包含具有限定名称的属性.我想使用XmlSlurper获取属性值,但尝试访问该属性而不指定命名空间不起作用(下面是一个最小的例子).
def rootNode = new XmlSlurper().parseText( '''<root xmlns:ex="http://example.com"> <one ex:a1="uno!"/> <ex:two>Some text!</ex:two> </root>''' ) assert rootNode.one[0].@a1.text() == 'uno!' rootNode.one [0].@ a1.text()将产生一个空字符串.如果使用rootNode.one [0].’@ ex:a1′.text(),我们得到正确的值,但这取决于文档中使用的名称空间前缀 – 并且不能依赖它们是相同的对于其他文档,关联的命名空间是重要的. 所以问题是: 解决方法
我认为如果不指定这样的命名空间,就无法访??问具有关联命名空间的属性.否则,只有“名称的本地部分”将用于保存属性的地图,导致像
this old bug (groovy 1.7.5)这样的情况.
也许最好的方法是使用 import groovy.xml.Namespace def xml = ''' <root xmlns:ex="http://example.com"> <one ex:a1="uno!"/> <ex:two>Some text!</ex:two> </root>''' 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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |