2012-05-11 152 views
2

所以我一直都给予分配在我的“固定”的XPath的大学和获得它以正确的顺序返回节点。返回的XPath正确的顺序(insted的文档顺序)

我一直试图找到解决写一个很长的代码,并打破每个表达式为小撕成小块,并把它重新结合在一起的一种方式。

伊夫想到的一些想法,但我需要帮助,使他们发生:)

  1. 查找在XPath罐子是对节点排序方法,并删除它 - 问题是我不知道它可能看到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> 

和此表达式:/库/书[3] /前同辈::书 即时得到

BOOK1 第二册

insted:

book2 BOOK1

我可以在Java程序

感谢您对所有您的帮助:)

+2

Point采取的所有更改。 :) – Drau

+0

什么是正确的顺序?如果你的意思是排序,你可以[使用XSLT](http://stackoverflow.com/q/4848809/163956)? –

+0

增加了一个例子。 我可以使用任何东西,只要我把它写入一个java代码 我不明白,XSLT如何可以帮助? – Drau

回答

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) 
+0

好吧,并且我怎样才能移动到XPath 2.0/XQuery 1.0? 我在哪里可以找到罐子?已经找到它了。 这也适用于复杂的表达式吗?或者只知道如何颠倒节点的顺序? (1,2,3,4,5到5,4,3,2,1) – Drau

+1

@Drau:一种可能性是获得撒克逊 - 其唯一的开发人员是迈克尔凯。当然,获得一本关于XPath 2.0的好书并开始学习。 –

+1

有几款产品为Java实现了XQuery 1.0或XPath 2.0,其中Saxon就是其中之一。就像Dimitre一样,我建议你在提出任何详细问题之前先阅读规范。这是非常强大的 –