XPathの「/ node()」と「node()」の違いは何ですか?

Aug 18 2020

XPathの私の理解によると、HTMLまたはXMLドキュメントの場合:これは、コンテキストノードの子であるノードを返す
$x("/node()")こと$x("/child::node()")を意味します。ここで、ルートノード(/)はコンテキストノードです。したがって、html要素を返します。

$x("node()")$x("child::node()")これも同じhtml要素を返すことを意味します。ただし、この場合、上記の場合とは異なり、コンテキストノードは提供されていません。では、この場合、どのようにしてコンテキストノードを識別しますか?

また、上記のXPath式は構文的にも機能的にも同じです。

回答

1 kjhughes Aug 18 2020 at 22:16

違いは/node()、コンテキストノードをドキュメントルート(/)として絶対的に指定しますがnode()、暗黙の相対コンテキストノードに依存することです。

暗黙の相対コンテキストノードはどのように決定されますか?まあ、コンテキストに基づいています。;-)たとえば、ホスティング言語は通常、初期コンテキストノードを一致または反復される現在のノードに設定します。次に、XPath自体の評価内で、各ロケーションステップ(スラッシュで区切られている/)は、後続のステップのコンテキストノードを確立します。

$x(path, [startNode])クロムコンソールで使用される表記法は、明示的にコンテキストノードを指定するために使用できるオプションの二番目の引数を取ります。デフォルトでは、その観察された行動につながる文書のルートノードと同じである$x("node()")$x("/node()")指定された文書に対して同じ結果を返さ。

また、上記のXPath式は構文的にも機能的にも同じです。

はっきりnode()child::node()している構文的に、はい、彼らは、異なるが、意味的に(または機能的にので、あなたが言うように、)同じchild::軸がデフォルトの軸です。

も参照してください

  • XSLT / XPathの現在のノードとコンテキストノード?
  • XMLのルートノード、ルート要素、ドキュメント要素の違いは何ですか?
  • XPathの.//と// *の違いは何ですか?