XPath에서 "/ node ()"와 "node ()"의 차이점은 무엇입니까?
당 내는 HTML이나 XML 문서에 대해, XPath를 이해 :
$x("/node()")
수단 $x("/child::node()")
수단이 컨텍스트 노드의 자식 노드를 반환합니다. 여기서 루트 노드 (/)
는 컨텍스트 노드입니다. 따라서 html
요소를 반환합니다 .
$x("node()")
$x("child::node()")
동일한 html
요소 도 반환 함 을 의미 합니다 . 하지만이 경우 위의 경우와 달리 컨텍스트 노드를 제공하지 않았습니다. 그렇다면이 경우 컨텍스트 노드를 어떻게 식별합니까?
또한 위의 XPath 표현식은 모두 구문 및 기능적으로 동일합니다.
답변
차이점은 /node()
컨텍스트 노드를 문서 루트 ( /
) 로 절대적으로 지정 하지만 node()
암시 된 상대 컨텍스트 노드에 의존한다는 것입니다.
암시 적 상대 컨텍스트 노드는 어떻게 결정됩니까? 글쎄, 상황에 따라. ;-) 예를 들어, 호스팅 언어는 일반적으로 초기 컨텍스트 노드를 일치 또는 반복되는 현재 노드로 설정합니다. 그런 다음 XPath 자체 평가 내에서 각 위치 단계 (슬래시로 구분 /
)는 후속 단계에 대한 컨텍스트 노드를 설정합니다.
$x(path, [startNode])크롬 콘솔에 사용되는 표기법은 명시 적으로 컨텍스트 노드를 지정하는 데 사용할 수있는 옵션은 2 개의 인자를 가지고. 기본적으로 문서 루트 노드 $x("node()")
와 $x("/node()")
동일하므로 특정 문서에 대해 동일한 결과를 반환하고 관찰 된 동작이 발생 합니다.
또한 위의 XPath 표현식은 모두 구문 및 기능적으로 동일합니다.
분명히 node()
하고 child::node()
있습니다 구문 예, 그들이 다른,하지만 의미 (또는 기능적으로 당신이 말한대로,)가 있기 때문에 같은 child::
축이 기본 축입니다.
또한보십시오
- XSLT / XPath의 현재 노드 대 컨텍스트 노드?
- XML에서 루트 노드, 루트 요소 및 문서 요소의 차이점은 무엇입니까?
- XPath에서 .//와 // *의 차이점은 무엇입니까?