中ノード:のXPathコンテキストDTDを見て軸ナビゲーション
<!ELEMENT root (a|b)+>
<!ELEMENT a (a|b)*>
<!ELEMENT b (a|b)*>
そして、次の単純なXMLは:(Iは便宜上の要素をタグ付け)
<root>
<b1>
<b2></b2>
<a1></a1>
</b1>
<b3></b3>
</root>
Iは、次のクエリを実行する場合:
a) /descendant-or-self::node()/b[1]
b) /descendant-or-self::b[1]
[1]を適用する前に、a)とb)の両方で、XMLツリー内のすべてのbを取得します。
しかし、私が最初のbを求めるとき、a)では{b1、b2}を得て、b)では{b1}しか得ません。
私の質問は、このシナリオのコンテキストノードに関する論理は何ですか?言い換えれば、 "/ descendant-or-self :: node()/ b"(これは "//"と同等です)と "/ descendant-or-self/b"の違いは何ですか?
一般的に、/ descendant-or-self :: bはコンテキストノードがどこから "子孫 - または - 自己"に移動する "自己"であるかをすべて返します。もしそうなら、 "/ descendant-or-self :: b [2]"私の例では、XMLファイルのルートに二番目に近いタグを取得しますか? – sel