Xslt 将节点集值转换为字符串
我试图将一组节点值转换为字符串,以便使用XSLT contains函数。下面的示例无法返回“true”和错误,因为contains()不处理$allColors的节点集,该节点集应包含“red-white-blue”。有人知道我如何转换$allColors以便在contains方法中使用它吗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
<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
的变量选择一个空序列。右。为什么要把它简单化,而它可能是复杂的?