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

如何编写XSL:if条件判断任意D节点的attribute2含指定字符串

问题:判断任意D节点的attribute2是否包含指定字符串

给定XML结构:

<A>
    <B>
        <C>
            <D attribute1="testAttr1" attribute2="testAttr2"/>
            <D attribute1="testAttr1_2" attribute2="testAttr2_2"/>
            <D attribute1="testAttr1_3" attribute2="testAttr2_3"/>
        </C>
    </B>
</A>

需要编写<xsl:if>条件,要求任意一个D子节点的attribute2属性包含字符串"Attr"时条件成立。尝试的两种写法均不符合需求:

  • 带*的写法contains(A/B/C/*D/@attribute2,'Attr')属于语法错误,无法生效
  • 去掉*的写法contains(A/B/C/D/@attribute2,'Attr')仅会匹配第一个D节点的属性

解决方案

要实现任意D节点满足条件时触发判断,核心是检查是否存在至少一个符合条件的D节点,有两种可行写法:

方法1:兼容XSLT 1.0的写法

直接通过节点过滤表达式判断存在性:

<xsl:if test="A/B/C/D[contains(@attribute2, 'Attr')]">
    <!-- 条件成立时执行的逻辑 -->
</xsl:if>

方法2:XSLT 2.0及以上推荐写法

使用exists()函数明确检查节点存在性:

<xsl:if test="exists(A/B/C/D[contains(@attribute2, 'Attr')])">
    <!-- 条件成立时执行的逻辑 -->
</xsl:if>

关键说明

  • 表达式A/B/C/D[contains(@attribute2, 'Attr')]会筛选出所有attribute2包含"Attr"的D节点,只要这个节点集不为空,整个条件就返回true。
  • 之前的contains(A/B/C/D/@attribute2,'Attr')仅取第一个D节点的attribute2值进行判断,因此只能匹配第一个节点。
  • 错误的*D是语法误用,*代表任意元素,不能与具体元素名D组合使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:01:31