XPath の標準を読んで、その一部がどのように機能するかを理解しようとしています。
xpath 標準では、descendants-or-self が評価される順序が指定されていないようです (コンテキスト ノードが最初、または子孫が最初)。RFC のある段階で、存在する場合はすべての子孫とコンテキストを返すと述べています。別の段階では、コンテキスト ノードとすべての子孫を返すという反対のことを言います。
私の質問は: この XPath の動作は何ですか:
/a//c
論理的な観点から、これは深さ優先検索を行うことになっています。したがって、次の XML の場合:
<a>
<b>
<c v="1"/>
</b>
<c v="2"/>
</a>
ここでの論理的な(そして実際のものと思われる)動作は、結果が次のようになるようです。
c (v="1")
c (v="2")
ただし、RFC によると、 //c は以下と同等です。
/descendant-or-self::node()/child::c
つまり、私がこれを正しく理解している場合、子孫または自己がどのように評価されるかによって動作が異なる可能性があることを意味します。
コンテキスト ノードが最初に返された場合、結果は次のようになります。
c(v="2")
c(v="1")
に適用されたときに最初のノードが「//」から返されたので、それa
は自己です(これはですa
)。次に、それがその最初の子であるため、返さchild::c
れると思います...c(v="2")
a
c
c(v="1")
実際に最初に返す必要がある理由を説明するRFC部分を誰かが指摘できますか?