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

OIC循环追加CSV时,如何实现XSLT生成连续递增的RowNum?

OIC追加CSV实现连续RowNum的解决思路

问题根源

你用的position()和xsl:number都是基于单次XSLT转换的上下文计数,每次循环是独立的XSLT处理,所以无法跨循环保留计数,导致RowNum重复。以下是三种可行的解决方法:

方法1:使用OIC全局持久化计数器

  1. 创建全局变量:在OIC中创建一个全局变量(比如GLOBAL_ROW_COUNT),初始值设为0,开启持久化(避免OIC重启后丢失值)。
  2. 计算当前循环的起始RowNum:在每次循环开始前,读取GLOBAL_ROW_COUNT的值作为起始偏移量。
  3. 生成RowNum:在XSLT中,用${GLOBAL_ROW_COUNT} + position()作为当前记录的RowNum。
    <ns35:RowNum>
        <xsl:value-of select="$GLOBAL_ROW_COUNT + position()"/>
    </ns35:RowNum>
    
  4. 更新全局变量:循环结束后,用Expression更新GLOBAL_ROW_COUNT为${GLOBAL_ROW_COUNT} + 本次处理的记录数(比如10)。

方法2:读取已有CSV的行数确定起始值

  1. 读取已有文件行数:每次循环前,用OIC的File Adapter读取目标CSV文件,通过Groovy脚本或XSLT统计已有数据行数(注意排除表头行)。
    示例Groovy脚本计算行数:
    def fileContent = new File(inputFilePath).text
    def lineCount = fileContent.split('\n').size() - 1 // 减1是排除表头
    return lineCount
    
  2. 计算RowNum:将统计得到的行数作为起始偏移量,XSLT中用起始偏移量 + position()生成RowNum。
  3. 处理首次生成场景:如果文件不存在,起始偏移量设为0。

方法3:使用OIC序列生成器(Sequence Generator)

  1. 配置序列生成器:在OIC中创建一个Sequence Generator,设置起始值为1,步长为1,开启持久化。
  2. 获取连续序列值:在每条记录的处理逻辑中,调用序列生成器的“Next Value”操作,直接将返回值作为RowNum。
    这种方法不需要手动计算偏移量,序列生成器会自动跨循环保持连续计数,适合批量处理场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:45:31