将值传递到模板名称XSLT中

时间:2014-01-22 10:24:34

标签: xml templates xslt

我有一个这样的模板:

<xsl:template name="TextInput">
    <div>TextInput type template called</div>
</xsl:template>

我有一个循环:

<xsl:for-each select="ns:questionParts">

    <xsl:call-template name="ns:type"/>

</xsl:for-each>

其中ns:type对应不同的名称。在这种情况下,ns:type等于TextInput。但我可以有更多不同的类型。所以我试图为每种类型创建不同的模板,以便我可以根据类型调用模板。直接将ns:type传递到模板名称无法正常工作:"[FATAL]: Could not compile stylesheet"。无论如何我能做到这一点吗?要将元素中的类型直接传递给模板名称吗?

1 个答案:

答案 0 :(得分:2)

在XSLT中进行动态发送的方法是使用xsl:apply-templates,而不是xsl:call-template

替换

<xsl:template name="TextInput">
    <div>TextInput type template called</div>
</xsl:template>

通过

<xsl:template match="ns:type[.='TextInput']">
    <div>TextInput type template called</div>
</xsl:template>

并替换

<xsl:call-template name="ns:type"/>

通过

<xsl:apply-templates select="ns:type"/>