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

XSLT的for-each使用[position()=1]仍返回多个匹配值如何解决

问题原因

你遇到的问题是XPath表达式的优先级规则导致的。你当前写的//*[@key='xbrl:concept'][. = 'se:Bank'][position() = 1]中,[position() = 1]的作用范围是「每个父节点下的匹配子节点」,而不是「全局所有匹配节点的集合」。你提供的JSON里有两个独立的facts对象都包含xbrl:concept": "se:Bank",这两个节点在各自的父节点下的位置都满足position()=1的条件,所以会匹配到两个节点,最终输出两次heading值。

解决方法

这个问题只需要调整for-each的select表达式即可,不需要更换其他XSLT元素。你只需要把前面的节点筛选逻辑用括号包裹,再取第一个位置的节点即可,修改后的select表达式如下:

(//*[@key='xbrl:concept'][. = 'se:Bank'])[position() = 1]

也可以简化写为:

(//*[@key='xbrl:concept'][. = 'se:Bank'])[1]

如果你的场景只需要提取单个值,甚至可以省略xsl:for-each元素,直接用xsl:value-of取值即可,对应模板可以简化为:

<xsl:template match="//*[@key='facts']">
    <xsl:value-of select="(//*[@key='xbrl:concept'][. = 'se:Bank'])[1]/../*[@key='heading']"/>
</xsl:template>

修改后就只会输出一次Bank balance,符合你的预期。

内容的提问来源于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 05:12:00