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

XSL/XSLT 1.0嵌套for循环内如何获取匹配节点的取值

核心原因

你遇到的问题本质是XSLT的上下文节点切换规则:

  • 进入<xsl:for-each select="$weights-in-kg">后,当前上下文节点就变成了遍历到的weight元素,所以此时.返回的是重量值
  • 原模板匹配到的fruit节点已经不在当前上下文中了

解决方案

通过参数传递外层节点即可,不需要硬编码路径,用到XSLT 1.0自带的current()函数,该函数会返回当前模板最初匹配到的节点,不会被内层的for-each上下文切换影响。

步骤1:调用模板时传入外层节点参数

修改匹配fruit的模板代码:

<xsl:template match="shop/fruits/fruit">
    <xsl:for-each select="$weights-in-kg">
        <xsl:call-template name="some-template-I-have">
            <!-- current() 指向当前模板匹配的原始fruit节点 -->
            <xsl:with-param name="outer-node" select="current()" />
        </xsl:call-template>
    </xsl:for-each>
</xsl:template>

步骤2:命名模板中声明接收参数

修改some-template-I-have模板代码:

<xsl:template name="some-template-I-have">
    <!-- 声明接收外层节点参数 -->
    <xsl:param name="outer-node" />
    
    <!-- 获取当前weight值,依旧用. -->
    重量:<xsl:value-of select="." />
    <!-- 获取外层fruit值,用传入的参数 -->
    水果:<xsl:value-of select="$outer-node" />
</xsl:template>

补充说明

这个方案完全满足模板复用需求:如果在其他场景调用该模板,只需要把对应需要的外层节点作为outer-node参数传入即可,不需要修改模板内部逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:48:03