基于属性值的XSLT模板分发

基于属性值的XSLT模板分发,xslt,xpath,xslt-2.0,Xslt,Xpath,Xslt 2.0,我想知道是否可以根据属性值在XSLT(2.0)中分派到。让我们假设以下示例XML: <root> <field code="a">Content A</field> <field code="b">Content B</field> </root> 类似地,可以对每个可能的代码值使用和,其中可以使用,调用专用的命名模板 有更好的基于属性值的模板分派解决方案吗?您的代码在XSLT 1.0和2.0中都有效,这也

我想知道是否可以根据属性值在XSLT(2.0)中分派到
。让我们假设以下示例XML:

<root>
    <field code="a">Content A</field>
    <field code="b">Content B</field>
</root>
类似地,可以对每个可能的代码值使用
,其中可以使用
,调用专用的命名模板


有更好的基于属性值的模板分派解决方案吗?

您的代码在XSLT 1.0和2.0中都有效,这也是一种很好的实践。有什么问题吗?

如果可以的话,尽量避免使用模板匹配(有时不能,比如针对变量或参数值进行测试)。没错。我更喜欢的方法是使用模板匹配。我想可能有一种方法可以直接匹配属性值,从而避免与
字段[@code='dispatch value']
@jindrichm重复,您可以在例如
字段/@code[.='b']
上进行匹配。但通常只有当您想将该属性转换为另一个属性或至少简单地输出其值时才有意义。如果
字段
的转换或输出因属性不同而不同,则通常更容易在与元素匹配的模板中处理差异。
<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>