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

WSO2 XSLT中全局变量在for-each赋值后外部访问问题

XSLT循环外访问循环内计算值的解决方案

问题根源

XSLT中的变量是不可变的,你在for-each循环内声明的$UPDATE_FLAG是局部变量,和外部同名变量完全独立,外部变量始终保持初始空值,这就是循环外无法获取循环内赋值结果的原因。

解决方案

既然你确认循环中只会有一次赋值(即仅一个data节点满足id != $CUSTOMER_ID),可以直接用XPath表达式提前计算出目标值,无需在循环内尝试赋值。修改后的代码如下:

<xsl:template match="/">
    <xsl:if test="$CALL_FROM = 'CREATE_CUSTOMER'">
        <customerData xmlns="">
            <!-- 直接通过XPath获取符合条件的id值,无匹配则为空 -->
            <xsl:variable name="UPDATE_FLAG" select="/jsonObject/data[id != $CUSTOMER_ID]/id"/>
            <ContactInfo>
                <xsl:if test="$FLAG = 'True'">
                    <xsl:for-each select="/jsonObject/data">
                        <Address>
                            <AddressLine1>
                                <xsl:value-of select="address1"/>
                            </AddressLine1>
                            <AddressLine2>
                                <xsl:value-of select="address2"/>
                            </AddressLine2>
                            <Country>
                                <xsl:value-of select="country"/>
                            </Country>
                            <Code>
                                <xsl:value-of select="code"/>
                            </Code>
                        </Address>
                    </xsl:for-each>
                </xsl:if>
            </ContactInfo>
            <UpdateRequiredFlag>
                <xsl:value-of select="$UPDATE_FLAG"/>
            </UpdateRequiredFlag>
        </customerData>
    </xsl:if>
</xsl:template>

说明

  • select="/jsonObject/data[id != $CUSTOMER_ID]/id"会自动选取第一个满足id != $CUSTOMER_ID的data节点的id值,若没有匹配节点则变量为空,完全符合你原代码的逻辑。
  • 移除了循环内的局部变量声明,避免变量名混淆,同时保证外部变量能正确获取目标值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:48:14