马丁给出了很好的解释。
如果您想要什么是允许的,那么根本没有group
属性的元素将与具有属性的元素在同一个组中group=''
——这并不精确。
最简单的解决方案是在group-by
属性中指明属性是否group
存在并不重要。
最简单的方法是:
<xsl:for-each-group select="Root/*" group-by="string(@group)">
这是一个完整的转换:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each-group select="Root/*" group-by="string(@group)">
"<xsl:sequence select="string(@group)"/>"
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
当此转换应用于提供的 XML 文档时:
<Root>
<Item id="1" group="foo" />
<Item id="2" group="bar" />
<Item id="3" />
</Root>
产生了想要的结果:
"foo"
"bar"
""