2012-05-11 109 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一樣,我建議你在提出任何詳細問題之前先閱讀規範。這是非常強大的 –