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

时间:2012-05-11 07:18:06

标签: java xpath

所以我已经在我的大学里获得了一个“修复”XPath的任务,并让它以正确的顺序返回节点。

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

我想过一些想法,但我需要帮助才能让它们成为现实:)

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

  2. 我发现这个选项看起来应该可以解决问题 http://cafeconleche.org/books/xmljava/chapters/ch16s06.html
    但它要求dom实现XPath 3.0 并且我无法在任何地方找到dom - 任何想法是否有这样的事情?

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

  4. 例如:for this xml

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

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

    BOOK1 book2

    绝对:

    第二册 book1

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

    感谢您的帮助:)

1 个答案:

答案 0 :(得分:3)

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

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

reverse(/library/book[3]/preceding-sibling::book)