2012-05-11 5 views
2

私の大学ではXPathを「修正」して正しい順序でノードを返すように割り当てられました。XPathの正しい順序を返す(ドキュメントオーダーの添付)

非常に長いコードを書いて、各式を小さな区切りに分けて、再び一緒に置く方法を見つけようとしていました。

アイブ氏はいくつかのアイデアを考えたが、私は彼らが、ノードをソートし、それを削除するXPathジャー内のメソッドを探す

  1. :)起こることが困難な - 問題は、iがその可能ならば知りませんでXPathのjarコードを見て、それをオンラインで見つけられませんでした。もしあなたが私にそれを指摘できれば、それは素晴らしいでしょう!任意のアイデアを、このようなものがあるかどうか -

  2. アイブ氏はそれがトリックに http://cafeconleche.org/books/xmljava/chapters/ch16s06.html
    を行う必要がありますが、それは、XPath 3.0 のDOM実装を要求し、私はどこでもそのDOMを見つける傾けるように見えるこのオプションを見つけましたか?

  3. あなたは他のアイデアがあれば聞いてみたいです!例えば

:/ライブラリ/ブック[3] /先行兄弟::ブック Imは

BOOK1 BOOK2

を取得:このXML

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

と、この表現のために

insted of:

book2私はJavaプログラム

に限り、私はそれがそうであるように何かを使用することができますBOOK1

は、すべてのあなたの助けをありがとう:)

+2

すべての変更が行われました。 :) – 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(またはXPath 2.0のスーパーセットであるXQuery 1.0)に移動する必要があります。 XPath 2.0では、次の式は必要なものを返します。

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

XPath 2.0/XQuery 1.0にどうすれば移行できますか? jarファイルはどこにありますか?すでにそれを探しました。 これは複雑な式でも動作しますか?またはノードの順序を逆にする方法しか知りませんか? (1,2,3,4,5 into 5,4,3,2,1) – Drau

+1

@Drau:1つの可能性はSaxonを取得することです - その唯一の開発者はMichael Kayです。もちろん、XPath 2.0に関する良い本を手に入れて学習を始めることができます。 –

+1

Java用のXQuery 1.0またはXPath 2.0を実装する製品がいくつかありますが、そのうちの1つはSaxonです。 Dimitreのように、詳細な質問をする前にスペックを読んでみることをお勧めします。それは非常に強力です –

関連する問題