이는 "비 PARAM"요소와 일치하는 열쇠가 될 것이다 달성하는 또 다른 방법,
<xsl:key
name="params"
match="tag[@name!='param']"
use="generate-id(preceding-sibling::tag[@name='param'][1])" />
그리고 최초의 가장 앞 PARAM 요소별로 그룹화, 당신은 당신의 "PARAM을 일치시켜 시작할 것 "요소
<xsl:apply-templates select="tag[@name='param']" />
그리고 당신은, 당신은 다음 키
<xsl:apply-templates select="key('params', generate-id())" />
를 사용하여 그룹의 관련 태그를 선택할 수에 맞게 각각에 대해 (루트 lelement 가정) 샘플 XML에 적용 할 때
는 다음과 같은 출력
param
- Token
- Token
- Token
param
- Token
param
- Token
- Token
- Token
- return
당신은 당신이 할 수 있었던 "수익"요소를 원하지 않는 경우입니다 다음 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:key name="params" match="tag[@name!='param']" use="generate-id(preceding-sibling::tag[@name='param'][1])" />
<xsl:template match="/*">
<xsl:apply-templates select="tag[@name='param']" />
</xsl:template>
<xsl:template match="tag[@name='param']">
<xsl:text>param </xsl:text>
<xsl:apply-templates select="key('params', generate-id())" />
</xsl:template>
<xsl:template match="tag">
<xsl:value-of select="concat(' - ', @name, ' ')" />
</xsl:template>
</xsl:stylesheet>
시도 다른 템플릿을 추가하여 일치시킨 다음 무시하십시오.
+1 두 번째 해결 방법은 "형제 재귀"라고도합니다. 거의 필요하지 않은 XSLT 2.0에서도이 기법을 마스터 할 가치가 있습니다. –