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

XSLT 2.0使用group-adjacent按属性分组空属性节点失效问题求解

问题分析

你原有实现的核心问题在于逻辑不匹配需求:

  • 你对所有Position属性值执行相邻分组,且将所有分组内多节点产生的默认空格统一替换为-,这会误处理非A属性的连续节点
  • 你没有针对性判断:仅当相邻分组是Position="A"且组内节点数≥2时,才需要在组内节点之间插入连字符
正确实现代码

使用XSLT 2.0及以上版本的实现如下:

<xsl:variable name="columnId">
  <xsl:for-each-group select="CabinLayout/Columns" group-adjacent="string(@Position)">
    <xsl:choose>
      <!-- 仅当分组的Position属性为A且组内至少2个节点时,用-连接组内文本 -->
      <xsl:when test="current-grouping-key() = 'A' and count(current-group()) ge 2">
        <xsl:value-of select="current-group()" separator="-"/>
      </xsl:when>
      <!-- 其他场景直接拼接组内所有文本 -->
      <xsl:otherwise>
        <xsl:value-of select="current-group()" separator=""/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:for-each-group>
</xsl:variable>
<ColumnID><xsl:value-of select="$columnId"/></ColumnID>
逻辑验证

该实现完全匹配你的三个测试样例:

  1. 样例1中连续Position="A"的C、D节点被分到同一组,组内用-连接得到C-D,其余分组直接拼接,最终输出ABC-DEF
  2. 样例2中Position="A"的分组仅1个D节点,不需要加连字符,最终输出ABCDEFGHJK
  3. 样例3中有两组连续Position="A"的节点,分别拼接为C-D和G-H,最终输出ABC-DEFG-HJK

内容的提问来源于stack exchange,提问作者Umaimath Thonikkadavan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 16:06:03