I was asked if I can convert xml using xsl (1.0), but with the preservation of CDATA elements, even if there is no content in it. As an xsl beginner, I'm a bit overwhelmed by this question ...
here is a simple example.
what i have
<AMOUNT/>
what I want
<AMOUNT><![CDATA[]]></AMOUNT>
- Is there a way to force empty cdata segments without content?
- Is there a way to do this for all elements in a file?
- Is there a way to do this only for those contained in cdata-section elements ?
(look at the AMOUNT element)
here is my xml example
<?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 xsl example
<?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 conclusion
<?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>
(it's just cutting out real files)
source
share