我有一个这样的模板:
<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"
。无论如何我能做到这一点吗?要将元素中的类型直接传递给模板名称吗?
答案 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"/>