Groovy XmlSlurper无法使用默认命名空间获取lang属性

时间:2014-01-02 16:52:45

标签: xml groovy

我有以下xml

<group xmlns="http://www.cdisc.org/ns/odm/v1.3">
    <item>
        <text xml:lang="en">Mild</text>
        <text xml:lang="fr">Legere</text>
    </item>
<group>

我想从xml中获取所有“en”字符串。 我用以下groovy代码解析它

def doc = new XmlSlurper().parse(inputstream).declareNamespace(xmlns:'http://www.cdisc.org/ns/odm/v1.3')

List<String> text = []
def s = doc.item.find{ it@":lang" = "en"}.each {
    text.add(it.text())
}

println text

问题是接缝忽略了属性。我注册了默认命名空间,我在find闭包中尝试了xml:lang,:lang,lang的组合,但没有快乐。

有没有人知道我做错了什么。

由于

1 个答案:

答案 0 :(得分:1)

xml前缀始终引用名称空间http://www.w3.org/XML/1998/namespace - 这是固定的in the namespaces specification,不需要在XML文档中声明。

所以试试

def doc = new XmlSlurper().parse(inputstream).declareNamespace(
   xml:'http://www.w3.org/XML/1998/namespace')

然后xml:lang应该按预期工作。