You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

处理首个节点后对剩余XML Alignment节点进行倒序排序

解决方案:按指定规则排序HorizontalAlignment节点

问题分析

你需要实现两个核心逻辑:

  1. 第一个HorizontalAlignment节点单独用reach模板处理,且内部元素按externalStation倒序排序;
  2. 剩余HorizontalAlignment节点整体按每个节点下第一个HorizontalElements对应的internalStat属性值倒序排序,节点内部的HorizontalElements保持原有顺序。

原代码的问题在于:直接遍历所有HorizontalAlignment节点,无法对"剩余节点"这个集合整体排序,必须先筛选出剩余节点,再对该集合应用排序规则。

修改后的XSLT代码

<!-- 单独处理第一个HorizontalAlignment节点 -->
<xsl:apply-templates select="HorizontalAlignment[1]" mode="reach">
    <xsl:sort select="descendant-or-self::*/HorizontalElements/Start/station/@externalStation" data-type="number" order="descending"/>
</xsl:apply-templates>

<!-- 处理剩余HorizontalAlignment节点,按首个HorizontalElements的internalStat倒序排序 -->
<xsl:for-each select="HorizontalAlignment[position() > 1]">
    <!-- 排序键:当前节点下第一个HorizontalElements对应的internalStat属性 -->
    <xsl:sort select="HorizontalElements[1]/Start/Reference/stat/@internalStat" data-type="number" order="descending"/>
    
    <!-- 对当前节点的HorizontalElements应用surfaceLine模板 -->
    <xsl:for-each select="HorizontalElements">
        <xsl:apply-templates mode="surfaceLine"/>
    </xsl:for-each>
</xsl:for-each>

关键说明

  • 拆分处理逻辑:把第一个节点和剩余节点分开处理,避免在循环内用xsl:choose限制排序范围;
  • 排序集合正确:对HorizontalAlignment[position() > 1]这个节点集合应用xsl:sort,确保剩余节点整体按规则排序;
  • 路径匹配:请根据你的实际XML结构调整xsl:sort中的路径(比如你提到的/Project/Alignment/Elements/Line/Start/Reference/stat/@internalStat,需对应到HorizontalAlignment节点下的实际层级)。

内容的提问来源于stack exchange,提问作者Chuck Rheault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:33:34