如何从 XML 输出中的显示中排除一个空元素 (XSLT 1.0)

问题描述 投票:0回答:1

我正在寻找一种方法来防止显示没有属性的特定空标签(如果它为空)。我只能找到应用于整个 XSLT 文档的解决方案,这不是我需要的。我只需要一些我不想显示的空标签。

<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>
xslt-1.0
1个回答
0
投票

要删除没有任何属性或子节点(即元素、文本节点、注释或处理指令)的

CtrySubDvsn
元素,同时保持其他所有内容不变,您可以执行以下操作:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="CtrySubDvsn[not(@*|node())]" />

</xsl:stylesheet>
© www.soinside.com 2019 - 2024. All rights reserved.