I was questioned if i could transform an xml by using xsl (1.0) but with keeping the CDATA elements even if there is no content in it. As xsl beginner i am a little bit overwhelmed by that question...
here is a simple sample.
what i have
<AMOUNT/>
what i want
<AMOUNT><![CDATA[]]></AMOUNT>
- is there a way to force empty cdata segments with no content?
- Is there a way to do it for all elements in the file?
- Is there a way to do it just for the ones in the cdata-section-elements?
(have a look at the AMOUNT element)
here is my sample xml
<?xml version="1.0" encoding="iso-8859-1" ?>
<Artikel>
<Temp>
<Zeile>107</Zeile>
<Artikelzubehoerdaten>
<Artikelzubehoerdaten>
<ZubehoerID>18</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>1</UrsprungsArt>
<Ursprungsnummer>99100091</Ursprungsnummer>
<UrsprungsAuspraegungID>0</UrsprungsAuspraegungID>
<ZubehoerArt>1</ZubehoerArt>
<Zubehoernummer>00500041</Zubehoernummer>
<ZubehoerAuspraegungID>0</ZubehoerAuspraegungID>
<Automatisch>0</Automatisch>
<Mengenberechnung>1</Mengenberechnung>
<MengenFaktor>1.0000</MengenFaktor>
<Basismengeneinheit>Stk</Basismengeneinheit>
<Preisgrundlagen>2</Preisgrundlagen>
<ManuellerPreis>0.0000</ManuellerPreis>
<PreislisteID>0</PreislisteID>
<Timestamp>AAAAAAAEbVw=</Timestamp>
<Gruppendaten/>
</Artikelzubehoerdaten>
<Artikelzubehoerdaten>
<ZubehoerID>19</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>1</UrsprungsArt>
<Ursprungsnummer>99100091</Ursprungsnummer>
<UrsprungsAuspraegungID>0</UrsprungsAuspraegungID>
<ZubehoerArt>2</ZubehoerArt>
<Zubehoernummer>100</Zubehoernummer>
<Automatisch>0</Automatisch>
<Mengenberechnung>0</Mengenberechnung>
<MengenFaktor>0.0000</MengenFaktor>
<Preisgrundlagen>0</Preisgrundlagen>
<ManuellerPreis>0.0000</ManuellerPreis>
<PreislisteID>0</PreislisteID>
<Timestamp>AAAAAAAEbWA=</Timestamp>
<Gruppendaten>
<ZubehoerID>1</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>2</UrsprungsArt>
<Ursprungsnummer>100</Ursprungsnummer>
<ZubehoerArt>1</ZubehoerArt>
<Zubehoernummer>10300003</Zubehoernummer>
<ZubehoerAuspraegungID>0</ZubehoerAuspraegungID>
<Automatisch>0</Automatisch>
<Mengenberechnung>2</Mengenberechnung>
<MengenFaktor>1.0000</MengenFaktor>
<Basismengeneinheit>Stk</Basismengeneinheit>
<Preisgrundlagen>2</Preisgrundlagen>
<ManuellerPreis>0.0000</ManuellerPreis>
<PreislisteID>0</PreislisteID>
<Timestamp>AAAAAAABuBI=</Timestamp>
</Gruppendaten>
<Gruppendaten>
<ZubehoerID>2</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>2</UrsprungsArt>
<Ursprungsnummer>100</Ursprungsnummer>
<ZubehoerArt>1</ZubehoerArt>
<Zubehoernummer>10300001</Zubehoernummer>
<ZubehoerAuspraegungID>0</ZubehoerAuspraegungID>
<Automatisch>0</Automatisch>
<Mengenberechnung>2</Mengenberechnung>
<MengenFaktor>1.0000</MengenFaktor>
<Basismengeneinheit>Stk</Basismengeneinheit>
<Preisgrundlagen>2</Preisgrundlagen>
<ManuellerPreis>0.0000</ManuellerPreis>
<PreislisteID>0</PreislisteID>
<Timestamp>AAAAAAABuBM=</Timestamp>
</Gruppendaten>
<Gruppendaten>
<ZubehoerID>3</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>2</UrsprungsArt>
<Ursprungsnummer>100</Ursprungsnummer>
<ZubehoerArt>1</ZubehoerArt>
<Zubehoernummer>10300002</Zubehoernummer>
<ZubehoerAuspraegungID>0</ZubehoerAuspraegungID>
<Automatisch>0</Automatisch>
<Mengenberechnung>2</Mengenberechnung>
<MengenFaktor>1.0000</MengenFaktor>
<Basismengeneinheit>Stk</Basismengeneinheit>
<Preisgrundlagen>2</Preisgrundlagen>
<ManuellerPreis>0.0000</ManuellerPreis>
<PreislisteID>0</PreislisteID>
<Timestamp>AAAAAAABuBQ=</Timestamp>
</Gruppendaten>
</Artikelzubehoerdaten>
<Artikelzubehoerdaten>
<ZubehoerID>21</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>1</UrsprungsArt>
<Ursprungsnummer>99100091</Ursprungsnummer>
<UrsprungsAuspraegungID>0</UrsprungsAuspraegungID>
<ZubehoerArt>2</ZubehoerArt>
<Zubehoernummer>200</Zubehoernummer>
<Automatisch>0</Automatisch>
<Mengenberechnung>0</Mengenberechnung>
<MengenFaktor>0.0000</MengenFaktor>
<Preisgrundlagen>0</Preisgrundlagen>
<ManuellerPreis>0.0000</ManuellerPreis>
<PreislisteID>0</PreislisteID>
<Timestamp>AAAAAAAEk3U=</Timestamp>
<Gruppendaten>
<ZubehoerID>20</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>2</UrsprungsArt>
<Ursprungsnummer>200</Ursprungsnummer>
<ZubehoerArt>1</ZubehoerArt>
<Zubehoernummer>00200050</Zubehoernummer>
<ZubehoerAuspraegungID>0</ZubehoerAuspraegungID>
<Automatisch>0</Automatisch>
<Mengenberechnung>1</Mengenberechnung>
<MengenFaktor>1.0000</MengenFaktor>
<Basismengeneinheit>Stk</Basismengeneinheit>
<Preisgrundlagen>2</Preisgrundlagen>
<ManuellerPreis>0.0000</ManuellerPreis>
<PreislisteID>0</PreislisteID>
<Timestamp>AAAAAAAEk3I=</Timestamp>
</Gruppendaten>
</Artikelzubehoerdaten>
</Artikelzubehoerdaten>
</Temp>
</Artikel>
here is my sample xsl
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes" cdata-section-elements ="ARTICLE AUTO AMOUNT GROUP_NUMBER"/>
<xsl:template match="/">
<ARTICLE_LIST>
<xsl:for-each select="Artikel/Temp">
<ARTICLE>
<CROSS_SELLINGS>
<xsl:for-each select="Artikelzubehoerdaten/Artikelzubehoerdaten[ZubehoerArt=1]">
<CROSS_SELLING>
<ARTICLE><xsl:value-of select="Zubehoernummer"/></ARTICLE>
<AUTO><xsl:value-of select="Automatisch"/></AUTO>
<GROUP_NUMBER></GROUP_NUMBER>
<AMOUNT><xsl:value-of select="MengenFaktor"/></AMOUNT>
</CROSS_SELLING>
</xsl:for-each>
<xsl:for-each select="Artikelzubehoerdaten/Artikelzubehoerdaten[ZubehoerArt=2]">
<xsl:for-each select="Gruppendaten">
<CROSS_SELLING>
<ARTICLE><xsl:value-of select="Zubehoernummer"/></ARTICLE>
<AUTO><xsl:value-of select="Automatisch"/></AUTO>
<GROUP_NUMBER><xsl:value-of select="Ursprungsnummer"/></GROUP_NUMBER>
<AMOUNT></AMOUNT>
</CROSS_SELLING>
</xsl:for-each>
</xsl:for-each>
</CROSS_SELLINGS>
</ARTICLE>
</xsl:for-each>
</ARTICLE_LIST>
</xsl:template>
</xsl:stylesheet>
here is the actual output
<?xml version="1.0" encoding="iso-8859-1"?>
<ARTICLE_LIST>
<ARTICLE>
<CROSS_SELLINGS>
<CROSS_SELLING>
<ARTICLE><![CDATA[00500041]]></ARTICLE>
<AUTO><![CDATA[0]]></AUTO>
<GROUP_NUMBER/>
<AMOUNT><![CDATA[1.0000]]></AMOUNT>
</CROSS_SELLING>
<CROSS_SELLING>
<ARTICLE><![CDATA[10300003]]></ARTICLE>
<AUTO><![CDATA[0]]></AUTO>
<GROUP_NUMBER><![CDATA[100]]></GROUP_NUMBER>
<AMOUNT/>
</CROSS_SELLING>
<CROSS_SELLING>
<ARTICLE><![CDATA[10300001]]></ARTICLE>
<AUTO><![CDATA[0]]></AUTO>
<GROUP_NUMBER><![CDATA[100]]></GROUP_NUMBER>
<AMOUNT/>
</CROSS_SELLING>
<CROSS_SELLING>
<ARTICLE><![CDATA[10300002]]></ARTICLE>
<AUTO><![CDATA[0]]></AUTO>
<GROUP_NUMBER><![CDATA[100]]></GROUP_NUMBER>
<AMOUNT/>
</CROSS_SELLING>
<CROSS_SELLING>
<ARTICLE><![CDATA[00200050]]></ARTICLE>
<AUTO><![CDATA[0]]></AUTO>
<GROUP_NUMBER><![CDATA[200]]></GROUP_NUMBER>
<AMOUNT/>
</CROSS_SELLING>
</CROSS_SELLINGS>
</ARTICLE>
</ARTICLE_LIST>
(these are just cutouts of the real files)