Самое простое решение
Просто удалите data-type="number"
.
Ваш пример будет просто отлично сортироваться как текст (по умолчанию).В общем, простая сортировка как текст, вероятно, лучший подход .XSLT 1.0 не очень хорошо обрабатывает произвольные преобразования данных, и если вы попытаетесь использовать его как «общий» строковый процессор, вы получите большие, сложные и сложные в обслуживании преобразования.
Если вы делаете сортировку как текст, вам нужно убедиться, что все числа дополняются нулями слева до одинаковой длины.Все буквы должны быть в одном и том же случае (что в любом случае почти всегда верно, но может сломаться, если вы объедините данные из разных источников.) Обычно эти требования легко выполнить за пределами XSLT.
Несколько более общийи более длинное решение
Функция xslt translate(my-xpath-expr,'abcdef','ABCDEF')
может использоваться для преобразования шестнадцатеричных чисел в смешанном регистре в шестнадцатеричные в верхнем регистре.Это, вероятно, не обязательно, обычно.
Если вы не знаете длину шестнадцатеричного числа, вы можете добавить «0», как показывает решение Димитра, но вы часто можете уйтис более простым трюком:
<xsl:sort select="string-length(Generation/Sirio/Code)" data-type="number"/>
<xsl:sort select="translate(Generation/Sirio/Code,'abcdef','ABCDEF')"/>
Это работает, если меньшие числа никогда не длиннее больших.Это также работает, если числа могут содержать пробелы или иметь префикс «0x
».
Однако, если возможно, лучше всего просто убедиться, что все числа отформатированы одинаково, и сортировать по тексту - ПОЦЕЛУЙТЕ, где это возможно..