我正在寻求帮助,以解决我正在应用到基本XML文件的XSLT样式表遇到的问题,该文件将为正在构建的表输出基本HTML。具体来说,我正在尝试将<xslt:sort select="" />
应用于基于ID元素的输出内容,该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"/>
您需要按以下方式更改排序。
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/categories">
<root>
<xsl:for-each select="category">
<xsl:sort select="substring-after(@name, 'A')" data-type="number"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>