Xslt 如何使用xsl:sort与外来字符(即';æ;';';ø;';和';å;';)

Xslt 如何使用xsl:sort与外来字符(即';æ;';';ø;';和';å;';),xslt,xslt-2.0,Xslt,Xslt 2.0,我试图根据每个元素的名称对列表进行排序。例如: Title One Another Title Å Another Title Ø Yet Another Title 使用原始排序函数的输出结果如下: Another Title Title One Å Another Title Ø Yet Another Title <xsl:variable name="alpha1" select="abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQR

我试图根据每个元素的名称对列表进行排序。例如:

Title One
Another Title
Å Another Title
Ø Yet Another Title
使用原始排序函数的输出结果如下:

Another Title
Title One
Å Another Title
Ø Yet Another Title 
<xsl:variable name="alpha1" select="abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ0123456789"/>
<xsl:variable name="alpha2" select="0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZæÆøØåÅ"/>
...
<xsl:sort select="translate(current-grouping-key(), $alpha1, $alpha2)" data-type="text" order="ascending" case-order="lower-first"/>
而所需的输出是:

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"/>


正如你所看到的,这是一个相当少的问题。这是一种在多个地方使用它的更简单的方法(比如指定模式或其他什么),还是另一种没有这么广泛的方法。

如果长字符串没有变化(我假设它们没有变化),您可以将它们存储在单独的变量中,然后改用它们?我知道这不是最漂亮的解决方案,但它会缩短排序表达式,并使“字母表”的更改更容易实现

大概是这样的:

Another Title
Title One
Å Another Title
Ø Yet Another Title 
<xsl:variable name="alpha1" select="abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ0123456789"/>
<xsl:variable name="alpha2" select="0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZæÆøØåÅ"/>
...
<xsl:sort select="translate(current-grouping-key(), $alpha1, $alpha2)" data-type="text" order="ascending" case-order="lower-first"/>

...

也许可以为变量找到更好的名称:D

,只要XSLT处理器能够识别它,就可以添加

lang="no"

到xsl:sort元素。(我认为“否”是挪威语的语言代码,如果我错了,请纠正我。)

谢谢你的回答,但我不得不同意迈克尔·凯的回答。