gpt4 book ai didi

xml - XSL : How can I sort a three digit, 连字符分隔值?

转载 作者:行者123 更新时间:2023-12-01 17:32:56 24 4
gpt4 key购买 nike

问题

我试图对rule/@id的整个值进行排序,其中@id的值是一个三值连字符的字符串,如“1-10-12”或“10-15-2”。我尝试过转换为数字,也尝试过格式化数字,但没有成功。

代码示例输出仅按最左边的数字排序,子值乱序。

XML 源:

<rule-mapping name="C">
<rule id="0-1-1">
<checker id="checker1"/>
<checker id="checker2"/>
</rule>
<rule id="0-1-10">
<checker id="checker3"/>
</rule>
<rule id="0-1-11">
<checker id="checker4"/>
</rule>
<rule id="15-1-2">
<checker id="checker5"/>
</rule>
<rule id="0-1-12">
<checker id="checker6"/>
</rule>
</rule-mapping>

转换片段:

<tbody>
<xsl:for-each select="rule-mapping/rule">
<xsl:sort select="substring-before(@id, '-')" data-type="number"/>
<xsl:sort select="substring-after(@id, '-')" data-type="number"/>

<row>
<entry>
<xsl:value-of select="@id"/>
</entry>
<entry>
<xsl:for-each select="checker">
<p>
<codeph><xsl:value-of select="@id"/></codeph><xsl:text>&#160;</xsl:text>

</p>
</xsl:for-each>
</entry>
</row>
<xsl:text>&#xA;</xsl:text>
</xsl:for-each>
</tbody>

预期输出:

    <row>
<entry>0-1-1</entry>
<entry>
<p><codeph>checker1</codeph> </p>
<p><codeph>checker2</codeph> </p>
</entry>
</row>
<row>
<entry>0-1-10</entry>
<entry>
<p>
<codeph>checker3</codeph> </p>
</entry>
</row>
<row>
<entry>0-1-11</entry>
<entry>
<p>
<codeph>checker4</codeph> </p>
</entry>
</row>
<row>
<entry>0-1-12</entry>
<entry>
<p>
<codeph>checker6</codeph> </p>
</entry>
</row>
<row>
<entry>15-1-2</entry>
<entry>
<p>
<codeph>checker5</codeph> </p>
</entry>
</row>

提前致谢。

最佳答案

您的想法是正确的,但您需要更进一步:

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

将这三个 xsl:sort 放在一起,它应该按照您想要的方式排序。

关于xml - XSL : How can I sort a three digit, 连字符分隔值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com