我有一个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
应该起作用。