XSLT1.0:需要消除具有空字段的记录

XSLT1.0: Need to eliminate records which is having empty fields

专家们,我需要编写 XSLT 1.0 代码来消除 XML 中具有空字段的记录。

输入:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ns0:Accounts xmlns:ns0="urn:text.com:accounts">
    <Recordset>
        <Record>
            <FIELD1>123</FIELD1>
            <FIELD2/>
            <FIELD3/>
            <FIELD4>2020</FIELD4>
            <FIELD5/>           
        </Record>       
        <Record>
            <FIELD1/>
            <FIELD2/>
            <FIELD3/>
            <FIELD4/>
            <FIELD5/>                       
        </Record>       
        <Record>
            <FIELD1>89</FIELD1>
            <FIELD2>098</FIELD2>
            <FIELD3/>
            <FIELD4>678</FIELD4>
            <FIELD5>NEW</FIELD5>
            <FIELD6/>               
        </Record>       
        <Record>
            <FIELD1/>
            <FIELD2/>
            <FIELD3/>
            <FIELD4/>
            <FIELD5/>                   
        </Record>
        <Record>
            <FIELD1/>
            <FIELD2/>
            <FIELD3/>
            <FIELD4/>
            <FIELD5/>       
        </Record>       
    </Recordset>
</ns0:Accounts>

** 期望输出:**

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ns0:Accounts xmlns:ns0="urn:text.com:accounts">
    <Recordset>
        <Record>
            <FIELD1>123</FIELD1>
            <FIELD2/>
            <FIELD3/>
            <FIELD4>2020</FIELD4>
            <FIELD5/>           
        </Record>           
        <Record>
            <FIELD1>89</FIELD1>
            <FIELD2>098</FIELD2>
            <FIELD3/>
            <FIELD4>678</FIELD4>
            <FIELD5>NEW</FIELD5>
            <FIELD6/>               
        </Record>           
    </Recordset>
</ns0:Accounts>

** XSLT 我试过:**

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

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

</xsl:stylesheet>

此 XSLT 删除所有记录中的空字段,但我的要求是删除包含所有空字段的记录。如果记录包含一个具有某个值的字段,那么我们需要保持该记录原样。请支持..

这是您可以查看的一种方式:

XSLT 1.0

<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>

<xsl:template match="Record[not(*/text())]"/>

</xsl:stylesheet>

这是另一个:

<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="*"/>

<xsl:template match="/*">
    <xsl:copy>
        <Recordset>
            <xsl:copy-of select="Recordset/Record[*/text()]"/>  
        </Recordset>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>