返回 XPath 正确的顺序(而不是文档顺序)



所以我在我的大学里接到了一个"修复"XPath的任务,并让它以正确的顺序返回节点。

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

我想到了一些想法,但我需要帮助使它们发生:)

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

  2. 我发现这个选项看起来应该可以解决问题
    http://cafeconleche.org/books/xmljava/chapters/ch16s06.html但它需要 DOM 实现 XPath 3.0而且我在任何地方都找不到那个 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程序中使用任何东西,我就可以使用任何东西

感谢您的所有帮助:)

在 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)

最新更新