i have the following XSL that will transform an XML file and basically flatten it (remove all the sub nodes). However i dont think think it is very efficient, for example if there is no data for an element my XSL will still print out the enclosing tags, however what would be really nice, is if it didnt output any tags if there was no data in the XML file. Just wondering if someone could have a look and point me in the right direction please?
<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" omit-xml-declaration="no"/>
<xsl:template match="/*">
<broadWorksCDR>
<xsl:for-each select="cdrData">
<cdrData>
<serviceProvider><xsl:value-of select="headerModule/serviceProvider" /></serviceProvider>
<type><xsl:value-of select="headerModule/type" /></type>
<eventCounter><xsl:value-of select="headerModule/recordId/eventCounter" /></eventCounter>
<systemId><xsl:value-of select="headerModule/recordId/systemId" /></systemId>
<date><xsl:value-of select="headerModule/recordId/date" /></date>
<systemTimeZone><xsl:value-of select="headerModule/recordId/systemTimeZone" /></systemTimeZone>
<userNumber><xsl:value-of select="basicModule/userNumber" /></userNumber>
<groupNumber><xsl:value-of select="basicModule/groupNumber" /></groupNumber>
<direction><xsl:value-of select="basicModule/direction" /></direction>
<callingNumber><xsl:value-of select="basicModule/callingNumber" /></callingNumber>
<callingNumberContext><xsl:value-of select="basicModule/callingNumberContext" /></callingNumberContext>
</cdrData>
</xsl:for-each>
</broadWorksCDR>
</xsl:template>
</xsl:stylesheet>
You can use template, e.g.: