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

XSLT实现:为指定XML元素添加连续编号及文本的方法

解决XSLT中为带id的元素生成连续编号文本的问题

核心思路

要实现带连续编号的输出,XSLT内置的<xsl:number>元素是最直接的方案,它可以精准统计符合条件的节点位置。针对你的需求,需要:

  • 匹配带id属性的<parent>元素(而非直接匹配<Children>)
  • 用<xsl:number>统计这类<parent>的连续序号
  • 拼接指定格式的文本并生成<fo:block>

修正后的XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <!-- 匹配根节点,触发后续模板 -->
  <xsl:template match="/input">
    <xsl:apply-templates select="parent[@id]"/>
  </xsl:template>

  <!-- 匹配带id属性的parent元素 -->
  <xsl:template match="parent[@id]">
    <fo:block>
      <!-- 拼接文本:静态前缀 + 连续编号 + Children元素内容 -->
      <xsl:value-of select="concat('Parent ', 
                                  xsl:number(count='parent[@id]', level='any'), 
                                  ' ', 
                                  Children/text())"/>
    </fo:block>
    <!-- 保留原有的子节点处理逻辑 -->
    <xsl:apply-templates select="example_child"/>
  </xsl:template>

  <!-- 处理example_child及子节点(可根据需求调整) -->
  <xsl:template match="example_child | child">
    <xsl:apply-templates/>
  </xsl:template>
</xsl:stylesheet>

代码解释

  1. <xsl:number>的使用:

    • count='parent[@id]':指定只统计带有id属性的<parent>元素,确保编号仅针对符合条件的节点
    • level='any':忽略层级,全局统计所有符合条件的<parent>,保证编号连续
  2. 模板匹配调整:

    • 原代码匹配<parent/Children>,但id属性属于<parent>,因此改为直接匹配带id的<parent>,逻辑更清晰
    • 通过<xsl:apply-templates select="parent[@id]"/>精准筛选需要处理的节点

输出结果

应用上述XSLT到你的XML后,会生成如下内容:

<fo:block>Parent 1 Children of Parent id 100</fo:block>
<fo:block>Parent 2 Children of Parent id 180</fo:block>
<!-- 后续example_child及child节点的输出(根据模板保留) -->

内容的提问来源于stack exchange,提问作者priyanka manogaran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:50:29