xsl:choose
是否可以使用(用于 MSXML 引擎)从 rtf 创建节点集变量?
我有以下构造:
<xsl:choose>
<xsl:when test="function-available('msxsl:node-set')">
<xsl:variable name="colorList" select="msxsl:node-set($std:colorList)"/>
<xsl:for-each select="$colorList/color">
tr.testid<xsl:value-of select="@testid"/> {
color:<xsl:value-of select="."/>;
}
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="colorList" select="$std:colorList"/>
<xsl:for-each select="$colorList/color">
tr.testid<xsl:value-of select="@testid"/> {
color:<xsl:value-of select="."/>;
}
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
std:colorList
当然是树片段。以上工作正常,并且可以,因为两个替代方案的代码相同,但不是那么大。
但是对于较大的代码片段我想知道是否可以通过首先根据rtf声明变量,然后执行代码来避免重复代码;就像是
<xsl:variable name="colorList">
<xsl:choose>
<xsl:when test="function-available('msxsl:node-set')">
<xsl:copy-of select="msxsl:node-set($std:colorList)"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$std:colorList"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:for-each select="$colorList/color">
tr.testid<xsl:value-of select="@testid"/> {
color:<xsl:value-of select="."/>;
}
</xsl:for-each>
但这不能正常工作:MSXML 抱怨colorList
不是节点集,因此不能在xsl:for-each
.
XSL transformation failed due to following error:
Expression must evaluate to a node-set.
-->$colorList<--/color
std:colorList
请注意,在工作示例中,由于“复制”到colorList
变量中而没有发生此错误。显然这是一个 xsl 解析错误,而不是运行时错误。
我应该使用其他东西xsl:copy-of
吗?或者还有其他方法可以达到同样的效果吗?
如果您想知道,std:colorList
内容如下:
<std:colorList>
<color testid="111">#FF0000</color>
<color testid="999">#FFFF00</color>
</std:colorList>