如何在使用 XmlSlurper 解析 xml 时读取冒号属性名称(例如 model:name)



我有一个XMl,其中属性是例如model:name。

升级到 Grails 2 后,无法使用

it.@"model:name".text()

我已经阅读了如何在使用 XmlSlurper 解析 xml 时读取带连字符的属性名称(例如 model_name),并且也点击了链接,但没有任何东西指向有关如何处理冒号属性的文档。

xml:lang 属性的最终解决方案:it.attributes()['{http://www.w3.org/XML/1998/namespace}lang']

您所说的"冒号属性"实际上是命名空间中的属性。XmlSlurper 的默认行为是忽略命名空间,因为当您要求它输入不带冒号的节点名称时,它将查找具有该本地名称的节点,而不考虑命名空间。所以你可能会发现,简单地

it.@name

找到您感兴趣的属性。如果这不起作用,则需要对从 XmlSlurper 返回的对象调用declareNamespace,以将前缀映射到对应于 XML 文档中model:的命名空间 URI(查找 XML 中的xmlns:model="http://example.com"或任何内容)

def xml = new XmlSlurper().parse(...).declareNamespace(
    model:"http://example.com")

然后model:name应该起作用。

最新更新