sourcecode

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

copyscript 2023. 10. 11. 20:54
반응형

현재 노드 대.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]

요령은 각주가 이미 사용되었는지 여부를 알려주는 것입니다.만약 이것이 처음으로 각주를 접했다면, 당신은 다음과 같이 쓰길 원합니다.\footnotecommand; 그렇지 않으면 당신은 a를 쓰기를 원합니다.\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::*node-set)을 현재 노드에 연결합니다.fn기여하다.(실제로 말할 필요는 없습니다../@fn; 당신은 그냥 말할 수 있습니다.@fn.)

즉, 컨텍스트 노드는 XPath 술어 내부로 사용자를 남겨놓습니다. 현재 노드는 술어 외부에 도달하고, 현재 템플릿에 의해 처리되는 노드로 다시 이동합니다.

컨텍스트 노드

컨텍스트 노드XPath 평가 컨텍스트의 일부이며 각 위치 단계에 따라 달라집니다.

step1 / step2 / step3 / ...

마다step

axis::node-test[predicate]
  • 각 단계는 이전 단계에서 설정한 컨텍스트 노드를 기준으로 평가됩니다.
  • 그런 다음 각 단계에서 다음 단계의 컨텍스트 노드가 되는 노드를 선택합니다.
  • predicate 노드는 입니다를 따라 입니다.axisnode-test.
  • 컨텍스트 노드는 다음과 같이 액세스할 수 있습니다...

현재 노드

현재 노드()는 XSLT 처리 모델의 일부입니다.1

  • 현재 노드는 원본 XML 문서에서 XSLT 템플릿과 가장 잘 일치하는 노드입니다.
  • 현재 노드가 일치된 템플릿의 각 XPath 식에 대한 시작 컨텍스트 노드가 됩니다.
  • 는 수 .current()XPath 술어 내에 있습니다.

컨텍스트 노드와 현재 노드 간의 기본적인 차이를 이해하는 데는 중요하지 1않지만 XSLT 2.0에서는 평가 컨텍스트에 대한 설명이 변경되었습니다. 현재 노드와 현재 노드 목록의 개념은 XPath 개념인 컨텍스트 항목, 컨텍스트 위치 및 컨텍스트 크기로 대체되었습니다.

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

반응형