マーティンは良い説明をしました。
必要なものが許可されている場合、属性をまったく持たない要素は、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"
""