Xslt 将节点集值转换为字符串

Xslt 将节点集值转换为字符串,xslt,xslt-1.0,xslt-2.0,Xslt,Xslt 1.0,Xslt 2.0,我试图将一组节点值转换为字符串,以便使用XSLT contains函数。下面的示例无法返回“true”和错误,因为contains()不处理$allColors的节点集,该节点集应包含“red-white-blue”。有人知道我如何转换$allColors以便在contains方法中使用它吗 <colors> <color type="rgb">red</color> <color type="rgb">white</colo

我试图将一组节点值转换为字符串,以便使用XSLT contains函数。下面的示例无法返回“true”和错误,因为contains()不处理$allColors的节点集,该节点集应包含“red-white-blue”。有人知道我如何转换$allColors以便在contains方法中使用它吗

<colors>
    <color type="rgb">red</color>
    <color type="rgb">white</color>
    <color type="rgb">blue</color>
</colors>

<xsl:for-each-group select="colors/color" group-by="@type">
     <xsl:variable name="allColors" select="current-group()/color"/>
     <allColors><xsl:value-of select="contains($allColors, 'red')"/></allColors>
</xsl:for-each-group>

红色
白色
蓝色

我倾向于同意michaels的评论,但您可以使用以下内容,它应该能满足您的需求,并正确分组:

<xsl:for-each-group select="colors/color" group-by="@type">
    <group>
        <type><xsl:value-of select="@type" /></type>
        <hasRed><xsl:value-of select="current-group() = 'red'" /></hasRed>
    </group>
</xsl:for-each-group>


谢谢大家的回复。我最终如何搜索特定颜色是否存在是因为

字符串长度(当前-group()[color='red']/color)>0

为什么要使用contains()测试节点集?如果其中一个节点包含“红色”或“有色”,是否希望得到肯定的答案?对于每个组
颜色
元素,使用
current-group()/color
的变量选择一个空序列。右。为什么要把它简单化,而它可能是复杂的?