2

我想根据源 XML 的属性动态更改应用模板模式,如下所示:

<xsl:choose>
    <xsl:when test="@myAttribute">
        <xsl:apply-templates select="." mode="@myAttribute"/>
    </xsl:when>
    <xsl:otherwise>
        <xsl:apply-templates select="." mode="someOtherMode"/>
    </xsl:otherwise>
</xsl:choose>

是否可以在 mode 属性中评估 XPath?还有其他方法吗?

谢谢!

4

1 回答 1

3

不,没有办法为mode属性使用动态值。它必须是静态的。在您的情况下,我建议您执行以下操作(使用名称myNode作为上面示例的上下文节点):

<xsl:template match="myNode[@myAttribute = 'someValue']" mode="specialHandling">
   <!-- template contents -->
</xsl:template>

<xsl:template match="myNode[@myAttribute = 'someOtherValue']" mode="specialHandling">
   <!-- template contents -->
</xsl:template>

<xsl:template match="myNode[@myAttribute = 'aThirdValue']" mode="specialHandling">
   <!-- template contents -->
</xsl:template>

<xsl:template match="myNode[not(@myAttribute)]" mode="specialHandling">
   <!-- template contents -->
</xsl:template>

那你甚至不需要那个xsl:choose。你可以这样做:

<xsl:apply-templates select="." mode="specialHandling" />
于 2013-02-14T17:56:24.150 回答