作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题
我试图对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> </xsl:text>
</p>
</xsl:for-each>
</entry>
</row>
<xsl:text>
</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/
我是一名优秀的程序员,十分优秀!