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

如何在XSLT中测试子节点值?我的判断逻辑为何失效?

XSLT条件判断错误分析与修正

错误原因

你的XPath表达式逻辑不符合预期:

  • //product/productCode[not(contains(.,'66889'))] 表示存在至少一个productCode节点不包含66889,而不是整个文档中不存在任何包含66889的productCode节点。
  • 你的XML中存在ABC、66890这类不包含66889的productCode,所以这个条件会返回true,导致第一个<xsl:when>被触发,即便文档里有66889。

另外,你的代码还存在语法错误:未闭合<xsl:choose>标签,也未处理第二个条件的分支。

修正后的代码

先明确逻辑优先级:更具体的条件(情况1)需要放在前面,避免被宽泛条件覆盖。同时用精确匹配替代contains,防止误匹配类似668891这类无关值。

完整修正代码如下:

<xsl:choose>
    <!-- 情况1:存在productCode为66890 且 不存在productCode为66889 -->
    <xsl:when test="//productCode[text()='66890'] and not(//productCode[text()='66889'])">
        <!-- 执行操作A:创建表格 -->
        <table>
            <!-- 表格内容 -->
        </table>
    </xsl:when>
    <!-- 情况2:存在productCode为66890 或 存在productCode为66889 -->
    <xsl:when test="//productCode[text()='66890'] or //productCode[text()='66889']">
        <!-- 执行操作B -->
        <p>执行另一操作</p>
    </xsl:when>
    <!-- 可选:处理既不存在66890也不存在66889的情况 -->
    <xsl:otherwise>
        <p>无目标productCode</p>
    </xsl:otherwise>
</xsl:choose>

补充说明

  • 如果productCode节点可能包含前后空格,可添加normalize-space()处理,例如://productCode[normalize-space(text())='66890']。
  • 若只需匹配嵌套在<product>节点下的productCode,将//productCode改为//product/productCode即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:47:37