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

XSLT控制for-each循环起止编号 实现se:Bank匹配项从0计数

问题根源

你遇到的编号异常是因为for-each遍历的是全部3个xbrl:concept节点,position()返回的是节点在整个未过滤序列中的位置,if筛选只是跳过了不符合条件的节点,并没有改变position()的计数基准。

可行实现方案

直接将筛选逻辑放到for-each的select属性中,提前过滤出所有xbrl:concept = se:Bank的节点再遍历计数,修正后的XSL代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
  <xsl:output method="xhtml" indent="yes" html-version="5"/>
  <xsl:mode on-no-match="shallow-skip"/>
    <!-- Parse JSON to XML -->
    <xsl:template match="data">
        <xsl:apply-templates select="json-to-xml(.)/*"/>
    </xsl:template>
    <!-- Printout periods -->
    <xsl:template match="//*[@key='facts']">
        <!-- 直接筛选符合条件的节点再遍历,此时序列长度为2 -->
        <xsl:for-each select="//*[@key='xbrl:concept'][. = 'se:Bank']">
            period<xsl:number value="position() - 1"/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

改动说明

  • 调整for-each选择器:新增筛选条件[. = 'se:Bank'],此时遍历的节点序列仅包含符合要求的se:Bank节点,position()会在这个过滤后的序列内计数
  • 编号偏移调整:用position() - 1将计数基准从1改为0,最终输出从0开始的连续编号,不受前置节点数量变化影响,适配动态数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:09:02