XPath에서 "/ node ()"와 "node ()"의 차이점은 무엇입니까?

Aug 18 2020

당 내는 HTML이나 XML 문서에 대해, XPath를 이해 :
$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])크롬 콘솔에 사용되는 표기법은 명시 적으로 컨텍스트 노드를 지정하는 데 사용할 수있는 옵션은 2 개의 인자를 가지고. 기본적으로 문서 루트 노드 $x("node()")$x("/node()")동일하므로 특정 문서에 대해 동일한 결과를 반환하고 관찰 된 동작이 발생 합니다.

또한 위의 XPath 표현식은 모두 구문 및 기능적으로 동일합니다.

분명히 node()하고 child::node()있습니다 구문 예, 그들이 다른,하지만 의미 (또는 기능적으로 당신이 말한대로,)가 있기 때문에 같은 child::축이 기본 축입니다.

또한보십시오

  • XSLT / XPath의 현재 노드 대 컨텍스트 노드?
  • XML에서 루트 노드, 루트 요소 및 문서 요소의 차이점은 무엇입니까?
  • XPath에서 .//와 // *의 차이점은 무엇입니까?