gpt4 book ai didi

xslt - 如何在xslt中按十六进制排序?

转载 作者:行者123 更新时间:2023-12-04 15:37:40 31 4
gpt4 key购买 nike

我试图通过包含十六进制值的元素对转换后的输出进行排序。
<xsl:sort select="Generation/Sirio/Code" data-type="number"/>
值是普通的旧十六进制:00 01 02 ... 0A ... FF但它们是这样排序的:0A FF 00 01 02 ,这表示只要涉及到字符,排序方法就会失败。

我该如何解决这个问题?

非常感谢!

最佳答案

本次改造 :

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:variable name="vZeroes"
select="'00000000000000000000000000000000000000'"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="*">
<xsl:sort select=
"concat(substring($vZeroes,
1,
string-length($vZeroes)
-
string-length(@hexVal)
),
translate(@hexVal,'abcdef','ABCDEF')
)
"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

应用于此 XML 文档时:
<t>
<x hexVal="0A"/>
<x hexVal="0327FE"/>
<x hexVal="ff5240"/>
<x hexVal="1BA402"/>
<x hexVal="C3A214"/>
</t>

产生想要的正确结果:
<t>
<x hexVal="0A"/>
<x hexVal="0327FE"/>
<x hexVal="1BA402"/>
<x hexVal="C3A214"/>
<x hexVal="ff5240"/>
</t>

解决方案详情 :

此解决方案所做的唯一假设是十六进制排序键的最大长度是有限的(比如 20)。然后我们使用一串零,比这个最大长度长。 $vZeroes变量保存这个零字符串并用于用零填充左侧的每个排序键,以便所有排序键具有相同的长度。

关于xslt - 如何在xslt中按十六进制排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3037179/

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