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

如何在XSLT中通过循环与变量批量生成升序编号新节点

XSLT 2.0 批量生成顺序item节点实现方案

你现有写好的filter节点映射逻辑不需要做任何修改,只要在Envelope根节点的输出模板内,追加一段循环生成逻辑即可,全程不需要手写重复的item标签。

核心实现逻辑

XSLT 2.0 原生支持整数区间序列语法start to end,可以直接生成从起始值到结束值的升序整数序列,配合xsl:for-each遍历就能自动按顺序生成对应数量的节点,不需要手写递归或者逐行硬编码。
如果需要灵活调整生成的item数量,可以先定义变量存储总数量,后续修改只需要改变量值即可,维护成本更低。

完整代码示例

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 匹配源文件根节点Envelope -->
  <xsl:template match="/Envelope">
    <Envelope>
      <!-- 保留你原有filter节点的全部映射逻辑,不需要改动 -->
      <xsl:apply-templates select="filter"/>

      <!-- 批量生成item节点逻辑 -->
      <!-- 定义要生成的item总数量,后续要改数量直接修改这个变量值就行 -->
      <xsl:variable name="totalItem" select="10"/>
      <!-- 遍历1到totalItem的整数序列,自动升序 -->
      <xsl:for-each select="1 to $totalItem">
        <item>
          <!-- 当前遍历的整数值作为item的节点值 -->
          <xsl:value-of select="."/>
        </item>
      </xsl:for-each>
    </Envelope>
  </xsl:template>

  <!-- 你原有的filter节点映射模板,保持原有代码不变即可 -->
  <xsl:template match="filter">
    <!-- 示例是直接复制原节点,如果你有自定义映射逻辑,保留自己的代码就行 -->
    <xsl:copy-of select="."/>
  </xsl:template>
</xsl:stylesheet>

效果说明

  • 转换后输出的XML会先完整保留你原有映射的filter节点内容,之后按1到10的升序追加10个item节点,和预期结构完全一致。
  • 如果你不需要灵活调整item数量,可以删掉变量定义,直接把循环的select属性写成1 to 10,效果完全相同。
  • 循环内的上下文项.就是当前遍历到的整数值,如果需要给item加属性、或者拼接其他内容,直接在<item>标签内补充逻辑即可。

注意:to关键字是XSLT 2.0及以上版本才支持的序列语法,你当前用的是XSLT2.0环境可以直接运行,不需要额外兼容处理。

转换后的输出结构参考:

<?xml version="1.0" encoding="UTF-8"?>
<Envelope>
  <filter>
    <type>book</type>
    <pageLimit>200</pageLimit>
    <brand>1</brand>
  </filter>
  <item>1</item>
  <item>2</item>
  <item>3</item>
  <item>4</item>
  <item>5</item>
  <item>6</item>
  <item>7</item>
  <item>8</item>
  <item>9</item>
  <item>10</item>
</Envelope>

内容的提问来源于stack exchange,提问作者Bc. MD. Peter Trahnyuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:45:36