所以我已经在我的大学里获得了一个“修复”XPath的任务,并让它以正确的顺序返回节点。
我一直试图找到一种方法来编写一个很长的代码,并将每个表达式分解为很少的和平并再次将它重新组合在一起。
我想过一些想法,但我需要帮助才能让它们成为现实:)
在XPath jar中找到对节点进行排序并删除它的方法 - 问题是我不知道是否可以看到XPath jar代码,并且没有在网上找到它.-如果你能指出我的话那太棒了!
我发现这个选项看起来应该可以解决问题
http://cafeconleche.org/books/xmljava/chapters/ch16s06.html
但它要求dom实现XPath 3.0
并且我无法在任何地方找到dom - 任何想法是否有这样的事情?
如果您有任何其他想法,我很乐意听到!
例如: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程序中使用它就可以使用任何东西
感谢您的帮助:)
答案 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)