通过XSLT删除XML空元素

通过XSLT删除XML空元素,xml,xslt,xslt-2.0,xslt-3.0,Xml,Xslt,Xslt 2.0,Xslt 3.0,SAP正在发送XML有效负载(IDOC)中的空元素。我们需要从负载中删除下面IDOC中的空元素()。我已经使用XSLT脚本删除了这些空元素,但我仍然看到,在下面的XSLT中,空元素没有被删除,而是被转换为。有谁能帮助我们使用XSLT代码来删除空代码吗 来自SAP的IDOC <?xml version="1.0" encoding="UTF-8"?><ORDERS05> <IDOC BEGIN="1">

SAP正在发送XML有效负载(IDOC)中的空元素。我们需要从负载中删除下面IDOC中的空元素(
)。我已经使用XSLT脚本删除了这些空元素,但我仍然看到,在下面的XSLT中,空元素没有被删除,而是被转换为
。有谁能帮助我们使用XSLT代码来删除空代码吗

来自SAP的IDOC

<?xml version="1.0" encoding="UTF-8"?><ORDERS05>
<IDOC BEGIN="1">
    <EDI_DC40 SEGMENT="1">
        <TABNAM>XXX</TABNAM>
        <MANDT>XXX</MANDT>
        <IDOCTYP>XXX</IDOCTYP>
    </EDI_DC40>
    <E1EDK02 SEGMENT="1">
        <QUALF>001</QUALF>
        <BELNR>TEST</BELNR>
        <DATUM>20210317</DATUM>
    </E1EDK02>
    <E1EDK02 SEGMENT="1"></E1EDK02>
    <E1EDK02 SEGMENT="1">
        <QUALF>002</QUALF>
        <BELNR>TEST</BELNR>
        <DATUM>20210317</DATUM>
    </E1EDK02>
    <E1EDK02 SEGMENT="1"></E1EDK02>
</IDOC></ORDERS05>

XXX
XXX
XXX
001
试验
20210317
002
试验
20210317
使用的XSLT

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes" />
<xsl:template match="@*|node()">
    <xsl:if test=". != '' or ./@* != ''">
        <xsl:copy>
            <xsl:apply-templates  select="@*|node()"/>
        </xsl:copy>
    </xsl:if>
</xsl:template></xsl:stylesheet>

预期产出

<?xml version="1.0" encoding="UTF-8"?><ORDERS05>
<IDOC BEGIN="1">
    <EDI_DC40 SEGMENT="1">
        <TABNAM>XXX</TABNAM>
        <MANDT>XXX</MANDT>
        <IDOCTYP>XXX</IDOCTYP>
    </EDI_DC40>
    <E1EDK02 SEGMENT="1">
        <QUALF>001</QUALF>
        <BELNR>TEST</BELNR>
        <DATUM>20210317</DATUM>
    </E1EDK02>
    <E1EDK02 SEGMENT="1">
        <QUALF>002</QUALF>
        <BELNR>TEST</BELNR>
        <DATUM>20210317</DATUM>
    </E1EDK02>
</IDOC></ORDERS05>

XXX
XXX
XXX
001
试验
20210317
002
试验
20210317
您的测试:

<xsl:if test=". != '' or ./@* != ''">
<E1EDK02 SEGMENT="1"></E1EDK02>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<!-- remove empty elements -->
<xsl:template match="*[not(node())]"/>

</xsl:stylesheet>