我正在使用Groovy处理一个XML文档,并测试某个节点的某个属性,该属性有一个名称空间前缀。它是如何工作的:
在groovy脚本中:
...
Element.Subelement.each {
if (it.'@type'=='ns2:xyType')
...do what ever...
}
在XML文档中:
<Element>
<Subelement xsi:type="ns2:xyType">
<!-- or another type, want to do something with
subelement only if type is "ns2:xyType" -->
</Subelement>
</Element>
寻找类似以下内容的内容:
if (it.'@xsi:type'=='ns2:xyType')
THX Seldon
5条答案
按热度按时间zour9fqk1#
您的文档有点令人困惑,因为XSI和NS2名称空间似乎都没有声明过,但我假设它们是在完整的文档中的某个地方声明的。
从The Groovy Docs开始
对于您的示例(请注意,您必须填写名称空间的URL):
z9ju0rcb2#
在官方文件中没有提到如何做到这一点,这是荒谬的。
以下是我发现的有效方法(Groovy 2.4)
其中,在创建XmlSlurper或解析器时,为名称空间Aware传入False。
rn0zuynd3#
kwvwclae4#
这对我来说很好(groovy 1.8.4)。给定的XML文档为:
此Assert传递:
注意:不过,您确实必须拥有.text()。
uubf1zoe5#
您还可以在代码中重新创建完整的属性标识符(它是
QName
),并使用它来查找属性值: