xml - 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"/>
我需要在这里添加什么才能正确考虑两位数?任何帮助深表感谢!
解决方案
看起来你走在正确的轨道上,但substring-before
没有任何目的,把事情搞砸了。尝试删除它:
<xsl:sort select="substring-after(@name, 'A')" data-type="number"/>
推荐阅读
- sql - 使用 Oracle SQL 用正则表达式拆分字符串
- angular - 有没有办法,我可以在 Angular HTTP 拦截器中阻止 HTTP 请求,直到其他请求成功?
- react-native - 在 ComponentWillMount 中更改状态进入无限循环
- r - 如何通过避免循环来优化代码?
- ruby-on-rails - 如何使用 Ruby 访问多态性中的变量?
- php - php,对两个数组值求和
- python - 是否可以使用opencv匹配算法覆盖两个共享地标但细节不同的图像
- android - 从其他类片段访问另一个类的功能
- java - Gson:使用通用方法处理
- arrays - VBA - Cells.Find 不适用于从数组中获取的值?