首页 > 解决方案 > XSLT 使用字母和数字进行排序

问题描述

我正在寻求帮助来解决我在应用到基本 XML 文件的 XSLT 样式表时遇到的问题,该文件将为我正在构建的表输出基本 HTML。具体来说,我正在尝试将 a<xslt:sort select="" />应用于基于 ID 元素输出的内容,其中包括文本(始终以字母“A”开头)以及一位数和两位数。但是,当我运行脚本时,它不能很好地处理两位数。当我希望 A10 出现在 A9 之后时,它将 A10 放在 A1 之后。

示例 XML 源文件:

<categories name="Category name goes here" version="2020">
        <category name="A1">
            <error id="ABC.DEFGH1"/>
            <error id="ABC.DEFGH2"/>
            <error id="ABC.DEFGH3"/>
            <error id="ABC.DEFGH4"/>
            <error id="ABC.DEFGH5"/>
        </category>
        <category name="A2">
            <error id="ABC.DEFGH1"/>
            <error id="ABC.DEFGH2"/>
            <error id="ABC.DEFGH3"/>
            <error id="ABC.DEFGH4"/>
            <error id="ABC.DEFGH5"/>
        </category>
        <category name="A9">
            <error id="ABC.DEFGH1"/>
            <error id="ABC.DEFGH2"/>
            <error id="ABC.DEFGH3"/>
            <error id="ABC.DEFGH4"/>
            <error id="ABC.DEFGH5"/>
        </category>
        <category name="A10">
            <error id="ABC.DEFGH1"/>
            <error id="ABC.DEFGH2"/>
            <error id="ABC.DEFGH3"/>
            <error id="ABC.DEFGH4"/>
            <error id="ABC.DEFGH5"/>
        </category>

这是我的 XSLT 排序当前的样子:

<xsl:sort select="substring-after(substring-before(@name, ' '), 'A')" data-type="number"/>

我需要在这里添加什么才能正确考虑两位数?任何帮助深表感谢!

标签: xmlxslt

解决方案


看起来你走在正确的轨道上,但substring-before没有任何目的,把事情搞砸了。尝试删除它:

<xsl:sort select="substring-after(@name, 'A')" data-type="number"/>

推荐阅读