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

基于XSLT筛选指定ValidationScenario并移除特定Validation元素求助

问题解决:通过XSLT移除指定节点下的特定元素

我有一份XML文件,需通过XSLT对其进行更新:筛选出name为“ABC test”的validationscenario节点,仅从该节点的validations中移除abc_name为“data_005”和“data_006”的validation元素,不得改动“XYZ test”节点下的内容。

输入XML

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://abcxyz.com/abc/config" version="0.37">
<validationscenarios>
      <validationscenarioslist>
         <validationscenario>
            <name>ABC test</name>
            <validations>
               <validation abc_name="data_001" levels="1"/>
               <validation abc_name="data_002" levels="2.4"/>
               <validation abc_name="data_003" levels="6.0"/>
               <validation abc_name="data_004" levels="4.0"/>
               <validation abc_name="data_005" levels="2,3"/>
               <validation abc_name="data_006" levels="3.5,4.5"/>
            </validations>
         </validationscenario>
         <validationscenario>
            <name>XYZ test</name>
            <validations>
               <validation abc_name="data_001" levels="3.5"/>
               <validation abc_name="data_002" levels="5.5"/>
               <validation abc_name="data_005" levels="6.5"/>
               <validation abc_name="data_006" levels="4.5"/>
            </validations>
         </validationscenario>
</validationscenarioslist>
</validationscenarios>
</config>

我编写的不完整XSLT脚本

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cc="http://abcxyz.com/abc/config" xmlns="http://abcxyz.com/abc/config" version="1.0">
  <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no" standalone="no"/>
  <xsl:strip-space elements="*"/>

 <xsl:template match="@*|node()|comment()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()|comment()"/>
    </xsl:copy>
  </xsl:template>

<xsl:template match=" /cc:config/cc:validationscenarios/cc:validationscenarioslist/cc:validationscenario/cc:name[contains(.,'ABC test')]">

// not working here //cc:validations/cc:validation[@abc_name='data_005'] //

</xsl:transform>

完整解决方案XSLT

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cc="http://abcxyz.com/abc/config" xmlns="http://abcxyz.com/abc/config" version="1.0">
  <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no" standalone="no"/>
  <xsl:strip-space elements="*"/>

  <!-- 身份转换模板:默认复制所有节点、属性和注释 -->
  <xsl:template match="@*|node()|comment()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()|comment()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 移除指定条件的validation节点:仅匹配ABC test场景下的data_005和data_006 -->
  <xsl:template match="cc:validationscenario[cc:name = 'ABC test']/cc:validations/cc:validation[@abc_name='data_005' or @abc_name='data_006']"/>
</xsl:transform>

方案说明

  1. 身份转换模板:保留原有逻辑,确保XML中未被特殊匹配的所有内容都原样复制,保证其他节点(比如XYZ test下的所有元素)不受影响。
  2. 移除模板:精准匹配需要删除的节点:
    • 先定位到name为“ABC test”的validationscenario节点
    • 再找到该节点下validations中的validation元素
    • 筛选出abc_name属性为“data_005”或“data_006”的元素,由于模板内没有任何输出逻辑,这些节点会被直接跳过,实现移除效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:16:23