XSLT:将模板应用于树片段

时间:2014-07-03 07:58:21

标签: xslt node-set

我定义了一个变量$ 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>

哪个不起作用。

如何将模板应用于树片段?

1 个答案:

答案 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和模式进行不同的处理步骤。