이미 처리 된 노드의 처리를 피할 수있는 방법이 있습니까?이미 처리 된 노드의 스킵 처리
입력 XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node1>node1.1</node1>
<node2>node2.1</node2>
<node2>node2.2</node2>
<node1>node1.2</node1>
</root>
XSL 당신이 볼 수 있듯이
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="node1">
[Node1]:<xsl:value-of select="."></xsl:value-of>
<xsl:apply-templates select="following-sibling::node2"/>
[End node1]
</xsl:template>
<xsl:template match="node2">
[Node2]:<xsl:value-of select="."></xsl:value-of>
</xsl:template>
</xsl:stylesheet>
출력
<?xml version="1.0" encoding="UTF-8"?>
[Node1]:node1.1
[Node2]:node2.1
[Node2]:node2.2
[End node1]
[Node2]:node2.1
[Node2]:node2.2
[Node1]:node1.2
[End node1]
템플릿 <xsl:template match="node2">
은 node2 요소마다 두 번 적용됩니다. node1 템플릿에서 한 번, XSLT 프로세서가 node2 요소를 변형 할 때 두 번 적용됩니다.
두 번째로 xsl:template match="node2"
을 적용하는 것을 피하는 해결책이 있습니까? node2에 대한 템플릿을 처리 한 직후 node2 처리를 중지해야합니다.
중요 이 예제는 좀 더 복잡한 유스 케이스의 에뮬레이션 일뿐입니다. 이것은 루트 요소 처리를위한 템플릿을 수정할 수 없다는 추가 제한이 있음을 의미합니다.
요소 처리를 중지하거나 다른 요소로 처리를 이동하는 방법이 있는지 알고 싶습니다.
그럼 언제 * *은'node2' 템플릿을 적용해야 하는가? 'node1' 요소 앞에 나오는'node2' 요소에만 해당합니까? – AakashM