Я пытаюсь отсортировать список по имени каждого элемента.Пример:
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"/>
Как видите, это довольно горстка.Или это более простой способ использовать это в нескольких местах (например, указание режима или что-то в этом роде), или другой подход, который не настолько широк.