gpt4 book ai didi

用于按元素名称升序排序的 XSLT 排序边缘案例

转载 作者:行者123 更新时间:2023-12-05 01:29:02 25 4
gpt4 key购买 nike

这是 [问题] 的跟进:xsl multiple sort hierarchy

正在使用的 XSL 是:

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

<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="name">
<xsl:sort select="@rank" data-type="number"/>
<xsl:sort/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>

<xsl:template match="name">
<name rank="{@rank}">
<xsl:copy-of select="text()"/>
<xsl:apply-templates select="name">
<xsl:sort select="@rank" data-type="number"/>
<xsl:sort/>
</xsl:apply-templates>
</name>
</xsl:template>
</xsl:stylesheet>

但是,我有一个情况,排名相同,但按元素名称 (ASC) 排序不正确。

<name rank="100000">Motor Sports
<name rank="100000">Motorcycle Racing [MOCY]
<name rank="100000">Motocross [MOCR]</name>
<name rank="100000">Speedway [SPEE]</name></name>
<name rank="100000">Motor Racing [MORA]
<name rank="100000">Formula 1 [FO1]</name>
</name>
</name>

在这种情况下,“Motor Racing”应该在“Motorcycle Racing”之上。你们能帮我解决这个问题吗?我试过同时添加这两个

<xsl:sort select="text()" order="ascending"/>

<xsl:sort select="name" order="ascending"/>

之后

<xsl:sort select="text()" order="ascending"/>

然而,这并没有奏效。

回答:感谢@MichaelKay 的回答,我解决这个问题的方法是将 XSLT 处理器更改为 Saxon 并使用 default-collat​​ion="http://saxon.sf.net/collat​​ion?decomposition=full"

最佳答案

你说

"Motor Racing" should have been above "Motorcycle Racing"

XSLT 没有定义详细的排序规则。这可能是忽略空格的排序规则。有些人以这种方式整理,有些人则不然。检查 XSLT 处理器的文档,可能有一种方法可以影响它使用的排序规则。

或者,您可以使用类似的方法获得所需的效果

<xsl:sort select="translate(xxx, ' ', '-')"/>

关于用于按元素名称升序排序的 XSLT 排序边缘案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052896/

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