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

使用XSLT移除XML空节点与带属性的空节点的转换需求

XSLT移除XML中空节点及带属性空节点的解决方案

先明确你的需求:把包含空节点(包括自闭合空节点、空内容节点、带属性的空节点)的原始XML,转换为只保留非空内容节点的目标XML。

原始XML

<ROOT> 
    <a>this is a </a> 
    <b /> 
    <c> this is c</c> 
    <d></d> 
    <e CSK:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> 
</ROOT>

期望目标XML

<ROOT> 
    <a>this is a </a> 
    <c> this is c</c> 
</ROOT>

实现的XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:CSK="http://example.com/CSK" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!-- 身份模板:复制所有未被特殊模板匹配的节点和属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配并移除所有空元素:无有效文本内容且无子元素的元素 -->
    <xsl:template match="*[not(normalize-space()) and not(*)]"/>
</xsl:stylesheet>

代码说明

  • 身份模板:这是XSLT的基础模板,作用是原样复制所有未被其他模板匹配到的节点和属性,保证非空节点能被完整保留。
  • 空元素移除模板:专门匹配满足两个条件的元素:
    1. 没有非空白的文本内容(normalize-space()会去除前后空白,结果为空说明没有有效文本)
    2. 没有任何子元素
      不管这些元素有没有附加属性(比如例子里的<e>节点带属性但内容为空),只要符合条件就会被匹配到,模板中没有输出逻辑,相当于直接移除这些空节点。

用这个XSLT处理你的原始XML,就能得到你想要的目标结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:59:11