我想按第一个字母对元素进行分组,但一些不同的字母应该被认为是相等的:A 和 Ä(以及 a 和 ä)都应该相同。
来源:
<root>
<entry name="Aa" />
<entry name="Ab" />
<entry name="Äa" />
<entry name="Ac" />
<entry name="Ba" />
</root>
转变:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output indent="yes"/>
<xsl:template match="root">
<root>
<xsl:for-each-group select="entry" group-by="upper-case(substring(@name,1,1))">
<key><xsl:value-of select="current-grouping-key()"/></key>
</xsl:for-each-group>
</root>
</xsl:template>
</xsl:stylesheet>
现在的结果:
<root>
<key>A</key>
<key>Ä</key>
<key>B</key>
</root>
我希望它的结果:
<root>
<key>A</key>
<key>B</key>
</root>
除了“Bb”之外的所有条目都应该在第一组中。
我认为成功的关键是使group-by()
函数正确处理 a、A、ä 和 Ä 相等(这对于某些德国排序/排序规则是正确的)。但是我还没有找到可以处理的 xpath 函数。