템플릿을 "확장하는"템플릿을 작성하고 있지만 몇 가지 문제가 있습니다. 이와모든 매개 변수를 전달하는 모든 XSL 템플릿을 catch하는 방법은 무엇입니까?
<xsl:template match="*[@condition]" mode="#all">
<xsl:element name="condition">
<xsl:attribute name="name">
<xsl:value-of select="@condition"></xsl:value-of>
</xsl:attribute>
<xsl:apply-imports>
</xsl:apply-imports>
</xsl:element>
문제는 <xsl:apply-imports>
누락 PARAMS를 사용하여 호출 템플릿입니다. 이 템플릿이 확장하려고하는 여러 템플릿이 있으므로 매개 변수 목록을 알 수 없습니다 (따라서 mode="#all"
).
좋은 방법이 있습니까?
추가 예 :
두 개의 최종 템플릿 (읽기 전용)을 고려 :
<xsl:template match="*" mode="mode1">
<param name="p1"/>
</xsl:template>
<xsl:template match="*" mode="mode2">
<param name="p2"/>
</xsl:template>
그들이 어디라고는 (읽기 전용) :
<xsl:apply-templates mode="mode1">
<xsl:with-param name="mode1" select="$mode1"/>
</xsl:apply-templates>
<xsl:apply-templates mode="mode2">
<xsl:with-param name="mode2" select="$mode2"/>
</xsl:apply-templates>
이가 수도 mode1, mode2, mode3, mode4 ... 100이 될 수 있으며 이름에는 패턴이 없습니다.
마지막 템플릿 주위에 추가 정보를 포함하는 전체 템플릿이 필요합니다. 예 :
<xsl:template match="*" mode="#all">
<xsl:next-match/>
</xsl:element>
위의 전역 템플릿은 매개 변수를 템플릿에 전달하지 않습니다.
감사합니다. 이것은 부분적으로 문제입니다. param의 이름도 알 수 없지만 이름 = "foo"는 알려지지 않았으며 다양한 매개 변수를 사용하는 다양한 템플릿이 있습니다. 모든 템플릿을 찾고 거기에있는 모든 매개 변수를 나열하는 것은 불가능합니다. – Jason
@ Jason : 템플릿을 사용할 때마다 모든 템플릿에 터널 매개 변수를 선언 할 필요가 없습니다. –
또 다른 완전한 예를 추가했습니다. 이것이 내가 원하는 것을 보여주기를 바랍니다. 열쇠는 템플리트가 읽기 전용이고 호출자 파일도 읽기 전용이라는 것입니다. 어떻게 든 템플릿을 확장 할 수 있습니다. – Jason