2

因此,我在我的大学中获得了“修复” XPath 的任务,并让它以正确的顺序返回节点。

我一直在试图找到一种方法来绕过编写很长的代码并将每个表达式分解成小小的和平,然后重新组合起来。

我想到了一些想法,但我需要帮助来实现它们:)

  1. 在 XPath jar 中找到对节点进行排序并将其删除的方法 - 问题是我不知道它是否可以看到 XPath jar 代码,并且没有在网上找到它。 - 如果你能指出它,那就太好了!

  2. 我发现这个选项看起来应该可以解决问题 http://cafeconleche.org/books/xmljava/chapters/ch16s06.html
    但它需要 XPath 3.0 的 dom 实现,我无法在任何地方找到该 dom - 如果有的话那种东西 ?

  3. 如果您有任何其他想法,我很想听听!

例如:对于这个 xml

 <library> 
 <book name="book1"> 
  hello 
 </book> 
 <book name="book2"> 
  world 
 </book>
 <book name="book3">
  !!! 
 </book>
 </library>

这个表达式:/library/book[3]/preceding-sibling::book 我得到

书 1 书 2

安装:

书 2 书 1

我可以使用任何东西,只要我在 java 程序中使用它

谢谢你的帮助 :)

4

1 回答 1

3

在 XPath 1.0 中,没有节点序列,只有节点集。XPath 1.0 规范没有定义节点集中的节点顺序。许多 API 也没有定义它,但它们总是按文档顺序返回节点集中的节点 - 不是因为 XPath 需要它,而是因为 XSLT 需要它,并且 XSLT 已经设定了 XPath 引擎应该如何表现的期望。

如果您希望节点序列能够控制排序,则必须迁移到 XPath 2.0(或 XQuery 1.0,它是 XPath 2.0 的超集)。在 XPath 2.0 中,以下表达式返回您想要的内容:

reverse(/library/book[3]/preceding-sibling::book)
于 2012-05-11T08:40:36.937 回答