【发布时间】:2011-11-13 15:34:20
【问题描述】:
我正在尝试按每个元素的名称对列表进行排序。示例:
Title One
Another Title
Å Another Title
Ø Yet Another Title
使用原始排序函数的输出结果如下:
Another Title
Title One
Å Another Title
Ø Yet Another Title
而期望的输出是:
Another Title
Title One
Ø Yet Another Title
Å Another Title
对于那些不熟悉特殊字符“Æ”、“Ø”和“Å”的人来说,这三个字母是挪威语字母表的扩展。所以挪威字母表的结尾是这样的“...STUVWXYZÆØÅ”。由于这个扩展,使用常规的 xsl:sort 会例如将 'Å' 放在 'Ø' 之前。在我看来,xsl 根据它们的 ASCII 值对元素进行排序,并且由于某种原因,'Æ'、'Ø' 和 'Å' 的 ASCII 值排序不正确(即,与字母表的顺序不同)。
我已经找到了一个解决方案,但是它需要的代码比我喜欢的要多,而且我必须在多个地方(在同一个 xsl 文档中)使用它,这使得使用大量代码更加麻烦。这是我现在使用的方法:
<xsl:sort select="translate(current-grouping-key(), 'abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ0123456789', '0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZæÆøØåÅ')" data-type="text" order="ascending" case-order="lower-first"/>
如您所见,这非常少。是在多个地方使用它的更简单的方法(例如指定模式或其他东西),还是另一种不那么广泛的方法。
【问题讨论】: