2012-02-10 10 views
1

を使用しての代わりには、次のXMLを考えてみましょう:のXPath 1.0:括弧

<A> 
    <B /> 
</A> 
<A> 
    <B /> 
</A> 

は、2番目のBの要素を取得するには、このXPath 1.0の式に括弧を使用しないようにする方法はありますか?私はA.下には、2番目のBが存在しないとして/ A/Bは、[2]、空のセットが返される使用している場合は

(/A/B)[2] 

何が必要なの先行式を評価し、適用するXPathプロセッサを伝えるものですその結果を述語とする。

私が必要とするのは、XPath式を作成する際に、前と後の部分がわからない(つまり、私はオープニングパランセシスを配置できません)。現時点では、式に/ Bを追加し、結果に述語を適用したいだけです。

答えて

0

あなたはこれを使用する必要があります。

//A/B[@id='2'] 
+0

不幸なことに、実際の文書にそのようなIDはありません。ここでは、私が選ぶ必要のある要素を簡単に識別するために使用しました。 – adostrian

1

このXMLが整形されていない - それは唯一のルートを持っている必要があります。上部に<R>があるとふりましょう。

を取得した後は、式全体を括弧で囲み、B[2]を追加することで、/R/A[2]/Bを検索して2番目のBを取得できるようになりました。最初のかっこを置くのはなぜ問題なのですか?

+0

いいえ、それは内側の部分ですが、xml全体はもちろん十分に形成されています。 XPath式が構築されている方法私は既に質問で言及したように、式の他の部分を認識していません。そういうわけで、私は括弧で囲まれたもの以外のものを探しました。 – adostrian

1

以下はまだだけ述語フィルタの内側に、括弧を使用していますので、あなたは、あなたがあなたのXPathを構築しているとことを追加することができます:

/A/B[count(.|(/A/B)[2])=1] 

それは差集合のためKaysian techniqueを使用しています。現在のノードが同じ場合、現在のノードの和集合と2番目のベクトルの選択は1になります。

+0

前の部分を知っていれば、より簡単な解決策として、括弧を使うことができます。 – adostrian