programing

XSLT / XPath의 현재 노드 대 컨텍스트 노드?

nasanasas 2020. 11. 25. 08:02
반응형

XSLT / XPath의 현재 노드 대 컨텍스트 노드?


XSLT에서 "현재 노드"와 "컨텍스트 노드"의 차이점은 무엇입니까? 여기에서 사용 된 두 용어를 모두 찾을 수 있습니다. http://www.w3.org/TR/xslt .

둘 중 하나를 언제 사용 하시겠습니까? 각각을 어떻게 참조합니까?


현재 노드는 템플릿이 현재 작동중인 모든 것입니다. 일반적으로 이것은 컨텍스트 노드이기도하지만 컨텍스트 노드는 중첩 된 XPath 표현식 (대괄호로 묶인 부분) 내에서 특별한 의미를 갖습니다. 여기서는 현재 일치를 위해 테스트중인 노드를 나타냅니다. 따라서 컨텍스트 노드는 XPath 표현식 내에서 변경되지만 현재 노드는 변경되지 않습니다.

컨텍스트 노드는 점 ( .) 으로 축약 되거나 때로는 완전히 생략 될 수 있습니다 . 중첩 된 표현식 외부에서 점이 현재 노드를 나타 내기 때문에 약간 혼란 스러울 수 있습니다. (이 경우 현재 노드는 컨텍스트 노드이기 때문에 현재 노드라고 할 수 있으며, 컨텍스트 노드라고하는 것이 더 적절하다고 말할 수 있습니다.하지만 스펙에서도 여기서는 현재 노드라고합니다.)

점은 컨텍스트 노드를 제공하므로 중첩 된 XPath 표현식에서 사용자는 현재 템플릿에 의해 처리되는 현재 노드를 다시 참조 할 방법이 필요합니다. current()함수 를 통해이 작업을 수행 할 수 있습니다 .

이 두 가지를 구별하는 것은 경우에 따라 유용합니다. 예를 들어 다음과 같은 XML이 있다고 가정합니다.

<a>
    <b>
        <c>foo<footnote fn="1"/></c>
        <d>bar</d>
    </b>
    <b>
        <c>baz</c>
        <d>aak<footnote fn="2"/></d>
    </b>
    <b>
        <c>eep</c>
        <d>blech<footnote fn="2"/></d>
    </b>
    <footnote-message fn="1">Batteries not included.</footnote>
    <footnote-message fn="2">Some assembly required.</footnote>
</a>

이제 다음과 같이 LaTeX로 변환한다고 가정합니다.

foo\footnote{Batteries not included.}
bar

baz
aak\footnote{Some assembly required.}

eep
blech\footnotemark[2]

요령은 각주가 이미 사용되었는지 여부를 알려주는 것입니다. 각주를 처음 접하는 경우 \footnote명령 을 작성해야합니다 . 그렇지 않으면 \footnotemark명령 을 작성하고 싶습니다 . 다음과 같은 XSL 코드를 사용할 수 있습니다.

<xsl:choose>
    <xsl:when test="count(preceding::*[./@fn = current()/@fn]) = 0">\footnote{...}</xsl:when>
    <xsl:otherwise>\footnotemark[...]</xsl:otherwise>
</xsl:choose>

여기에서는 컨텍스트 노드 fn속성 ( preceding::*노드 세트 의 결과 )을 현재 노드 fn속성과 비교합니다. (실제로 말할 필요는 없습니다 . ./@fn그냥 말할 수 있습니다 @fn.)

즉, 컨텍스트 노드는 XPath 술어 내부에 있습니다. 현재 노드는 조건 자 외부에 도달하여 현재 템플릿에서 처리중인 노드로 돌아갑니다.


컨텍스트 노드

문맥 노드 의 일부 의 XPath 평가 콘텍스트 각에 따라 변화 위치 단계 :

step1 / step2 / step3 / ...

각각 step어디에

axis::node-test[predicate]
  • 각 단계는 이전 단계에서 설정 한 컨텍스트 노드와 관련하여 평가됩니다 .
  • 그런 다음 각 단계는 다음 단계 의 컨텍스트 노드가되는 노드를 선택 합니다.
  • 평가할 때 predicate컨텍스트 노드는 axis통과 한 노드 node-test입니다.
  • 컨텍스트 노드는 ..

현재 노드

현재 노드 ()의 부분 XSLT의 처리 모델 : 1

  • The current node is the node in the source XML document best matched by an XSLT template.
  • The current node becomes the starting context node for each XPath expression in the matched template.
  • The current node can be accessed as current() within XPath predicates.

1Although insignificant to understanding the basic difference between context node and current node, note that in XSLT 2.0 the description of the evaluation context has been changed. The concepts of current node and current node list have been replaced by the XPath concepts of context item, context position, and context size.

참고URL : https://stackoverflow.com/questions/1022345/current-node-vs-context-node-in-xslt-xpath

반응형