1

我有一个 XML,其中一个属性是例如模型:名称。

升级到 Grails 2 后,无法使用提取属性

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

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

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

4

1 回答 1

2

您所说的“coloned attribute”实际上是namespace中的属性。XmlSlurper 的默认行为是忽略命名空间,因为当您向它询问不带冒号的节点名称时,它会找到具有该本地名称的节点,而不管命名空间如何。所以你可能会发现

it.@name

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

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

然后model:name应该工作。

于 2014-02-21T09:01:24.147 回答