XSLT如何基于属性选择模板
在样式表中,我想根据源xml中的属性选择一个模板。 不幸的是,似乎无法使用apply templates的mode属性,因为这必须是qname文本。 还有其他类似的方法吗 例如: 源xml:XSLT如何基于属性选择模板,xslt,Xslt,在样式表中,我想根据源xml中的属性选择一个模板。 不幸的是,似乎无法使用apply templates的mode属性,因为这必须是qname文本。 还有其他类似的方法吗 例如: 源xml: ... <document type="1"> <item>...</item> </document> ... 。。。 ... ... 样式表: ... <xsl:template match="document"> <
...
<document type="1">
<item>...</item>
</document>
...
。。。
...
...
样式表:
...
<xsl:template match="document">
<xsl:apply-templates select="item" mode="{@type}" />
</xsl:template>
<xsl:template match="item" mode="1">
...
</xsl:template>
<xsl:template match="item" mode="2">
...
</xsl:template>
。。。
...
...
简单答案:模式匹配
<xsl:template match="item[../@type = 'whatever']"/>
复杂答案:使用命名模板引用
<xsl:variavle name="vTemplate" select="document('')/xsl:template/@name"/>
<xsl:template match="xsl:template/@name[.='typeA']" name="typeA">
<xsl:param name="pContext"/>
</xsl:template>
<xsl:template match="xsl:template/@name[.='typeB']" name="typeB">
<xsl:param name="pContext"/>
</xsl:template>
<xsl:template match="document">
<xsl:apply-templates select="$vTemplate[.='typeA']">
<xsl:with-param name="pContext" select="item"/>
</xsl:apply-templates>
</xsl:template>
或者看看迪米特的
<xsl:variavle name="vTemplate" select="document('')/xsl:template/@name"/>
<xsl:template match="xsl:template/@name[.='typeA']" name="typeA">
<xsl:param name="pContext"/>
</xsl:template>
<xsl:template match="xsl:template/@name[.='typeB']" name="typeB">
<xsl:param name="pContext"/>
</xsl:template>
<xsl:template match="document">
<xsl:apply-templates select="$vTemplate[.='typeA']">
<xsl:with-param name="pContext" select="item"/>
</xsl:apply-templates>
</xsl:template>