我想基于源XML的属性动态更改apply-templates模式,如下所示:
<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?还有其他方法吗?
谢谢!
答案 0 :(得分: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" />