【问题标题】:GDataXML/Libxml2 XPath concat doesn't workGDataXML/Libxml2 XPath concat 不起作用
【发布时间】:2010-11-26 18:42:31
【问题描述】:

我在 iPhone 上使用GDataXML(在后台使用 libxml2)从 XML 文件中读取名称列表。

<persons>
    <person id=1>
       <firstname>John<firstname>
       <lastname>Doe<lastname>
    </person>
</persons>

但是当我尝试连接名字和姓氏时

/persons/person/concat(firstname, ' ', lastname)

它不适用于 GDataXML。当使用 .NET XML 库尝试相同的示例或使用 AquaPath 对其进行测试时,它可以工作。

有任何提示或其他替代方法可以让它工作吗?

【问题讨论】:

  • 好问题,+1。请参阅我的答案以获得解释和完整的解决方案。 :)
  • AquaPath 是 XPath 2.0 评估程序。

标签: iphone xml xpath libxml2


【解决方案1】:

但是当我尝试先连接时 姓氏与

/persons/person/concat(firstname, ' ', lastname) 

它不适用于 GDataXML。

LibXML 仅实现 XPath 1.0

上述表达式在 XPath 1.0 中的语法不正确(它是正确的 XPath 2.0 表达式)。

什么时候 尝试与示例相同的 .NET XML 库或对其进行测试 AquaPath 有效。

您对 .NET XML 有误解(除非您使用的是第三方 XPath 2.0 处理器,例如 Saxon、Altova 或 XQSharp)--.NET 没有实现 XPath 2.0强>。

解决方案

使用以下 XPath 1.0 表达式:

concat(/*/*/firstname, ' ', /*/*/lastname)

【讨论】:

  • @Dimitre:同样,在这种情况下,如果 XML 树提供程序只保留空白文本节点,normalize-space(/persons/person[1]) 将起作用。
  • @Dimitrie: 对我不起作用...在 AquaPath 和我的 Chrome XML 扩展中也不起作用...我总是收到“错误:INVALID_EXPRESSION_ERR:DOM XPath Exception 51`
  • @staeff:如果您收到这样的错误消息,这意味着您的复制/粘贴不正确并且没有完全复制表达式。我的答案中的 XPath 表达式在 XPath 1.0 和 XPath 2.0 中都有效。
  • @Alejandro:您提出的表达式依赖于元素的相对顺序以及 person 没有任何其他子元素。
  • @Dimitre:你是对的。这就是为什么我说"just in this case"。关于错误消息:请注意,如果有多个 person 元素,您的表达式不是有效的 XPath 2.0。 AquaPath 是一个 XPath 2.0 评估器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多