You need to enable JavaScript to run this app. 如何使用待匹配列列表驱动XSLT删除XML关联子元素
优惠活动
大模型
产品
解决方案
定价
更多

如何使用待匹配列列表驱动XSLT删除XML关联子元素

实现方案

采用XSLT身份转换模式完全适配当前Xalan 1.0的运行环境,无需复杂逻辑,核心规则为默认保留所有节点的原始结构,仅对符合删除条件的节点设置空输出规则。

核心逻辑说明

  • 用全局变量维护待删除列清单,后续调整列项无需修改匹配规则
  • 匹配时采用前后加分隔符的精确字符串判断,避免子串误匹配(比如防止短列名PREV被错误匹配成长列名PREVUNITCOST)
  • 针对场景中两类需删除的节点(带NAME子节点的CHILD1、带REFNAME子节点的CHILD2)单独设置过滤规则

可直接复用的XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 待删除列清单:保持前后都加|,列与列之间用|分隔,后续改列直接修改这里即可 -->
  <xsl:variable name="removeCols">|NORMDATE|ORIGRATE|ORIGUNITCOST|PREVRATE|PREVUNITCOST|</xsl:variable>

  <!-- 身份转换模板:默认保留所有节点、属性的原始结构 -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <!-- 过滤规则1:CHILD1下NAME值在删除清单的,整个节点不输出 -->
  <xsl:template match="CHILD1[contains($removeCols, concat('|', NAME, '|'))]"/>

  <!-- 过滤规则2:CHILD2下REFNAME值在删除清单的,整个节点不输出 -->
  <xsl:template match="CHILD2[contains($removeCols, concat('|', REFNAME, '|'))]"/>
</xsl:stylesheet>

IDE内使用步骤

  1. 将上述XSLT代码保存为独立的.xsl格式文件
  2. 在IntelliJ中新建XSLT运行配置,依次选择待转换的输入XML、刚才保存的XSLT文件
  3. 指定目标输出文件路径,运行配置即可生成符合要求的转换结果

维护说明

后续若待删除列清单有变动,仅需修改全局变量$removeCols的内容,保持每个列名前后统一使用|作为分隔符即可,无需改动其他模板逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 23:06:04