XSLT中基于属性值的模板调度

时间:2013-07-31 15:27:19

标签: xslt xpath xslt-2.0

我想知道是否可以根据属性值在XSLT(2.0)中调度<xsl:template>。我们假设以下示例XML:

<root>
    <field code="a">Content A</field>
    <field code="b">Content B</field>
</root>

我想为<xsl:template> match属性编写一个XPath选择器,该选择器将处理分配给为给定属性的每个值定义的模板。一种天真的方法可以比较每个模板中的属性值:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0">

    <xsl:template match="/root">
        <xsl:apply-templates select="field"/>    
    </xsl:template>

    <xsl:template match="field[@code = 'a']">
        Code A processing...
    </xsl:template>

    <xsl:template match="field[@code = 'b']">
        Code B processing...
    </xsl:template>

</xsl:stylesheet>

同样,可以对每个可能使用<xsl:choose>的代码值使用<xsl:when><xsl:call-template/>,调用专用的命名模板。

是否有更好的解决方案来根据属性值进行模板调度?

1 个答案:

答案 0 :(得分:2)

您的代码在XSLT 1.0和2.0中都有效,这也是很好的做法。有什么问题?