【问题标题】:XSLT1.0: Need to eliminate records which is having empty fieldsXSLT1.0:需要消除具有空字段的记录
【发布时间】:2021-04-24 09:26:23
【问题描述】:

专家,我需要编写 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 xslt-1.0 xslt-grouping


    【解决方案1】:

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

    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>
    

    【讨论】:

    • 非常感谢,它运行良好。
    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多