XSLT에서 "현재 노드"와 "컨텍스트 노드"의 차이점은 무엇입니까? 여기에 사용 된 용어는 모두 http://www.w3.org/TR/xslt입니다.현재 노드 대 XSLT/XPath의 컨텍스트 노드?
언제 둘 중 하나를 사용 하시겠습니까? 어떻게 각각을 언급합니까?
XSLT에서 "현재 노드"와 "컨텍스트 노드"의 차이점은 무엇입니까? 여기에 사용 된 용어는 모두 http://www.w3.org/TR/xslt입니다.현재 노드 대 XSLT/XPath의 컨텍스트 노드?
언제 둘 중 하나를 사용 하시겠습니까? 어떻게 각각을 언급합니까?
현재 노드는 현재 템플릿이 작동되는 모든 노드입니다. 일반적으로 컨텍스트 노드 일 수도 있지만 컨텍스트 노드는 중첩 된 XPath 표현 (대괄호 안에있는 부분) 내에서 특별한 의미를 갖습니다. 여기에는 현재 일치하는 노드가 테스트 중입니다. 따라서 컨텍스트 노드는 XPath 표현식 내에서 변경되지만 현재 노드에서는 변경되지 않습니다.
컨텍스트 노드는 점 (.
)으로 축약되거나 완전히 생략 될 수 있습니다. 중첩 된 표현식을 벗어나면 점은 현재 노드를 나타 내기 때문에 약간 혼란 스럽습니다. (이 경우 현재 노드는 컨텍스트 노드가되므로 현재 노드가 현재 노드 일 뿐이며 더 적절하게 컨텍스트 노드라고 할 수 있습니다. 그러나 스펙조차도 현재 노드라고합니다.)
점은 컨텍스트 노드를 제공하므로 중첩 된 XPath 식에서 사용자는 현재 템플릿으로 처리되는 현재 노드를 다시 참조 할 수있는 방법이 필요합니다. current()
함수를 통해이 작업을 수행 할 수 있습니다.
이 두 가지를 구별하는 것이 유용 할 때도 있습니다.
foo\footnote{Batteries not included.}
bar
baz
aak\footnote{Some assembly required.}
eep
blech\footnotemark[2]
트릭은 각주가 이미 사용되었는지 여부를 알 또는이다 :
<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>
지금이 같은 유액로 변환한다고 가정 : 예를 들어,이 같은 일부 XML이 있다고 가정 아니. 각주를 처음 접했을 경우 \footnote
명령을 쓰고 싶습니다. 그렇지 않으면 \footnotemark
명령을 작성하려고합니다. 이 같은 XSL 코드를 사용할 수 있습니다 여기에
<xsl:choose>
<xsl:when test="count(preceding::*[./@fn = current()/@fn]) = 0">\footnote{...}</xsl:when>
<xsl:otherwise>\footnotemark[...]</xsl:otherwise>
</xsl:choose>
우리는 현재 노드에합니다 (preceding::*
노드 집합의 결과에서) 문맥 노드 fn
속성을 비교하는 fn
속성. (실제로는 ./@fn
을 말할 필요가 없으며, 단지 @fn
이라고 말할 수 있습니다.)
간단히 말해, 컨텍스트 노드는 XPath 조건 자의 내부에있게합니다. 현재 노드는 술어 외부로 도달하고 현재 템플리트가 처리중인 노드로 돌아갑니다.
자축과 어떤 관련이 있습니까? – Devela