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

如何在XSLT 1.0中排除XML输出中的指定空元素

需求:仅隐藏特定空XML标签(非全局生效)

我需要实现:当特定无属性的空标签为空时,阻止其在XML输出中显示。目前找到的方案都是全局应用于整个XSLT文档,不符合需求,我只需要隐藏少数几个空标签。

补充说明:
我定义的空元素是指输出中显示为<Nm></Nm>且标签间无文本的元素。


两种应用场景

场景1:包含子元素的元素

如果<ClrSysMmbId>标签间无文本,则<ClrSysMmbId>和其子元素<MmbId>都不显示:

<ClrSysMmbId> <-- Remove if null 
    <MmbId/>  <-- Remove if null
</ClrSysMmbId>

场景2:无嵌套子元素的元素

输入示例:

<Cdtr> 
    <Nm>Institution Name</Nm> 
    <PstlAdr> 
        <PstCd>12345</PstCd> 
        <TwnNm>Town</TwnNm> 
        <CtrySubDvsn/> <-- Remove if null 
        <Ctry>JP</Ctry> 
        <AdrLine>123 Imaginary Drive</AdrLine> 
    </PstlAdr> 
    <CtctDtls/>
</Cdtr> 

期望输出:

<Cdtr> 
    <Nm>Institution Name</Nm> 
    <PstlAdr> 
        <PstCd>12345</PstCd> 
        <TwnNm>Town</TwnNm> 
        <Ctry>JP</Ctry> 
        <AdrLine>123 Imaginary Drive</AdrLine> 
    </PstlAdr> 
    <CtctDtls/>
</Cdtr> 

尝试过的无效代码

针对<CtrySubDvsn>元素,我写了以下代码:

<xsl:if test="not(CtrySubDvsn='')">
    <CtrySubDvsn>
    <xsl:value-of select="SupplierorParty/Address/State" />
    </CtrySubDvsn>
</xsl:if>

代码无报错,但输出仍显示空标签:

<Cdtr>
    <Nm>Institution Name</Nm>
        <PstlAdr>
        <PstCd>12345</PstCd>
        <TwnNm>Town</TwnNm>
        <CtrySubDvsn/>
        <Ctry>JP</Ctry>
        <AdrLine>123 Imaginary Drive</AdrLine>
        </PstlAdr>
    <CtctDtls/>
</Cdtr>

内容的提问来源于stack exchange,提问作者Lindsay A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:44:55