I have an XML file that contains some empty nodes like:
I am using Saxon 8.8 to transform this XML into another XML file, but I'd like to remove the empty nodes and leave the rest of the document as it was.
XML:
Required result:
So far I have partly managed this using the following stylesheet:
However, it creates the following:
I can see why it does this, but I cannot figure out how to get rid of the empty <CRITERION /> nodes completely.
Any ideas gratefully received.
Code:
<sample> <test/> <test1/> </sample>
XML:
Code:
<?xml version="1.0" ?> <ROOT> <CRITERION> <CRITERION_ID>1000</CRITERION_ID> <CRITERION_NAME>TEST</CRITERION_NAME> </CRITERION> <CRITERION> <CRITERION_ID>2000</CRITERION_ID> <CRITERION_NAME>TESTA</CRITERION_NAME> </CRITERION> <CRITERION> <CRITERION_ID /> <CRITERION_NAME /> </CRITERION> <CRITERION> <CRITERION_ID>3000</CRITERION_ID> <CRITERION_NAME>TESTB</CRITERION_NAME> </CRITERION> <CRITERION> <CRITERION_ID /> <CRITERION_NAME /> </CRITERION> </ROOT>
Code:
<?xml version="1.0" ?> <ROOT> <CRITERION> <CRITERION_ID>1000</CRITERION_ID> <CRITERION_NAME>TEST</CRITERION_NAME> </CRITERION> <CRITERION> <CRITERION_ID>2000</CRITERION_ID> <CRITERION_NAME>TESTA</CRITERION_NAME> </CRITERION> <CRITERION> <CRITERION_ID>3000</CRITERION_ID> <CRITERION_NAME>TESTB</CRITERION_NAME> </CRITERION> </ROOT>
Code:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="xml"/> <xsl:template match="/"> <ROOT> <xsl:for-each select="//CRITERION"> <CRITERION> <xsl:copy-of select="CRITERION_ID[normalize-space(.) != '']" /> <xsl:copy-of select="CRITERION_NAME[normalize-space(.) != '']" /> </CRITERION> </xsl:for-each> </ROOT> </xsl:template> </xsl:stylesheet>
Code:
<?xml version="1.0" ?> <ROOT> <CRITERION> <CRITERION_ID>1000</CRITERION_ID> <CRITERION_NAME>TEST</CRITERION_NAME> </CRITERION> <CRITERION> <CRITERION_ID>2000</CRITERION_ID> <CRITERION_NAME>TESTA</CRITERION_NAME> </CRITERION> <CRITERION /> <CRITERION> <CRITERION_ID>3000</CRITERION_ID> <CRITERION_NAME>TESTB</CRITERION_NAME> </CRITERION> <CRITERION /> </ROOT>
Any ideas gratefully received.
Comment