当我应用变换时,我得到一个异常:表达式必须求值为一个节点集。
<xsl:for-each select = "some expression">
<xsl:variable name="a0" select="some expression"/>
<xsl:variable name="a1" select="some expression"/>
<xsl:variable name="a2" select="some expression"/>
<xsl:for-each select="$a0 | $a1 | $a2">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>
</xsl:for-each>
现在,如果我将if语句放在第一个循环的级别,那么可以正确应用转换。
如果问题是表达式“$ a0 | $ a1 | $ a2”不被视为节点集,我如何使用XSLT 1.0实现类似目标?
答案 0 :(得分:3)
正如错误所述,在XSLT 1.0中,您不能使用union运算符来连接不是节点的操作数。
如果您使用的是支持the node-set()
function的XSLT处理器,则可以执行以下操作:
<xsl:for-each select="exsl:node-set($a0) | exsl:node-set($a1) | exsl:node-set($a2)">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>
但如果你打算这样做,你可以这样做:
<xsl:value-of select="concat($a0, ',', $a1, ',', $a2)" />
从你最近提出的一个问题来看,也许你有很多变数,在这种情况下,你的设计可能需要重新思考。如果您可以提供一些细节而不是通用占位符,也许有人可以建议您采用不同的方法。