user3529643
user3529643

Reputation: 105

XSLT remove empty node

Input:

<Root><output>
<queries>
    <query name="Test">
        <parameters>
            <parameter>298674,298673,298675,298676</parameter>
        </parameters>
        <queryResults>
            <record id="1">
                <column name="Order">272334</column>
                <column name="Task">272093</column>
                <column name="FirstAction">2709305</column>                     
            </record>
            <record id="2">
                <column name="Order">272334</column>
                <column name="Task">272093</column>
                <column name="FirstAction">2709301</column>
            </record>
            <record id="3">
                <column name="Order">272334</column>
                <column name="Task">272093</column>
                <column name="FirstAction">2709306</column>
            </record>
            <record id="4">
                <column name="Order">268997</column>
                <column name="Task">268756</column>
                <column name="FirstAction">2709307</column>
            </record>
            <record id="5">
                <column name="Order"/>
                <column name="Task"/>
                <column name="FirstAction">2709307</column>
            </record>
        </queryResults>
    </query>
</queries></output>

How do I remove the record that has no values in clumn Order?

Desired output:

<Root><output>
    <queries>
        <query name="Test">
            <parameters>
                <parameter>298674,298673,298675,298676</parameter>
            </parameters>
            <queryResults>
                <record id="1">
                    <column name="Order">272334</column>
                    <column name="Task">272093</column>
                    <column name="FirstAction">2709305</column>                     
                </record>
                <record id="2">
                    <column name="Order">272334</column>
                    <column name="Task">272093</column>
                    <column name="FirstAction">2709301</column>
                </record>
                <record id="3">
                    <column name="Order">272334</column>
                    <column name="Task">272093</column>
                    <column name="FirstAction">2709306</column>
                </record>
                <record id="4">
                    <column name="Order">268997</column>
                    <column name="Task">268756</column>
                    <column name="FirstAction">2709307</column>
                </record>                   
            </queryResults>
        </query>
    </queries></output>

My current XSL only removes the empty nodes

<xsl:strip-space elements="*"/>
 <xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="*[not(child::node())]"/>

And I can't seem to master the template match to remove the whole "Record" tag... Thank you very much!

Upvotes: 1

Views: 206

Answers (1)

hr_117
hr_117

Reputation: 9627

Add one new template to remove the record that has no values in clumn Order

<xsl:template match="record[column[ @name='Order']= '']"/>

This match record which do not have a value in column with name Order and ignore them.

Upvotes: 1

Related Questions