我定义了一个变量$ NodeVariable, 例如:
<xsl:variable name="NodeVariable">
<aT>
<aT2>foo</aT2>
<aT3>bar</aT3>
</aT>
</xsl:variable>
并且在代码的不同部分我想“申请” 不同的模板到myVariable。 不幸, 我不知道这是什么语法。
我尝试了以下内容:
<xsl:for-each select="$NodeVariable">
<xsl:call-template name="ns:ExtractInfo1"/>
</xsl:for-each>
<xsl:copy-of select="$NodeVariable">
<xsl:call-template name="ns:ExtractInfo2"/>
</xsl:for-each>
<xsl:copy-of select="$NodeVariable">
<xsl:call-template name="ns:ExtractInfo3"/>
</xsl:for-each>
哪个不起作用。
如何将模板应用于树片段?
答案 0 :(得分:2)
假设您使用的是XSLT 1.0处理器,则需要先将结果树片段转换为节点集:
<xsl:variable name="NodeVariable">
<aT>
<aT2>foo</aT2>
<aT3>bar</aT3>
</aT>
</xsl:variable>
<xsl:variable name="NodeSet" select="exsl:node-set($NodeVariable)"/>
(样式表声明xmlns:exsl="http://exslt.org/common"
),然后您可以根据需要以不同的模式应用模板,例如。
<xsl:apply-templates select="$NodeSet/aT" mode="m1"/>
并为该模式编写模板,例如
<xsl:template match="aT" mode="m1">
<xsl:value-of select="aT2"/>
</xsl:template>
当然,如果您真的想要调用命名模板,那么也可以这样做,但在我看来,XSLT中首选使用apply-templates和模式进行不同的处理步骤。