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

请求协助编写XSLT以筛选符合特定条件的XML<Test>节点

解决方案:用XSLT筛选符合条件的Test节点

没问题,我来帮你实现这个XML筛选转换的需求。下面是针对你的需求编写的XSLT代码,以及详细的逻辑说明:

完整XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 身份模板:默认复制所有节点和属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 针对Test节点的筛选模板 -->
    <xsl:template match="Test">
        <!-- 筛选条件:name以CheckType_开头,且包含value为XYZ的子节点 -->
        <xsl:if test="starts-with(@name, 'CheckType_') and context/value = 'XYZ'">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

关键逻辑解释

  • 身份模板:这是XSLT里的基础模板,作用是原样复制输入XML中所有未被其他模板匹配的节点和属性,保证输出XML的整体结构和原文件一致(比如外层的TestCode、TestCategory节点都会被保留)。
  • Test节点筛选模板:专门匹配所有<Test>节点,通过<xsl:if>设置两个过滤条件:
    1. starts-with(@name, 'CheckType_'):检查Test节点的name属性是否以CheckType_开头;
    2. context/value = 'XYZ':检查该Test节点下是否存在<context>节点包含值为XYZ的<value>子节点。
      只有当两个条件同时满足时,才会复制这个Test节点及其所有子内容,否则会直接过滤掉该节点。

转换验证

用你提供的输入XML运行这个XSLT后,会得到你期望的输出:

<?xml version="1.0" encoding="UTF-8"?>
<TestCode version="10.0">
<TestCategory name="SmokeTest">
<Test name="CheckType_123" type="String">
<Test_description>No description available for this Test</Test_description>
<context name="Testing">
<value>ABC</value>
<value>XYZ</value>
</context>
</Test>
</TestCategory>
</TestCode>

完全符合你的需求:第二个Test节点因为没有XYZ的value被过滤,第三个Test节点因为name不是CheckType_开头被过滤,只保留了第一个符合条件的Test节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:53:12