[xsl] Wrapping all elements in CDATA

Subject: [xsl] Wrapping all elements in CDATA
From: "Jesse Wolff" <jesse_wolff@xxxxxxxxx>
Date: Thu, 22 Apr 2004 00:26:41 -0700
I'm using a stylesheet to wrap all text nodes in CDATA elements. 

I get the expected output in MSXML and other parsers but in the latest
version of Xalan (2.6.0) I get different results. What am I doing wrong and
how can I correct this to work as expected with all parsers?

XML:
<?xml version="1.0"?>
<Person PersonID="5123456">
   <ContactInfo>
     <Email>person@xxxxxxxx</Email>
     <Phone>111-111-1111</Phone>
   </ContactInfo>
</Person>

Stylesheet:
<?xml version="1.0" encoding="UTF-8"?>
<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"/>
   
   <xsl:variable name="CDATABegin" select="'&lt;![CDATA['" />
   <xsl:variable name="CDATAEnd" select="']]&gt;'" />

   <xsl:template match="node()|@*">
     <xsl:copy>
        <xsl:apply-templates select="*|@*"/>
        <xsl:apply-templates select="text()"/>
     </xsl:copy>
   </xsl:template>

   <xsl:template match="text()">
     <xsl:value-of select="$CDATABegin" disable-output-escaping="yes"/>
     <xsl:value-of select="." disable-output-escaping="yes"/>
     <xsl:value-of select="$CDATAEnd" disable-output-escaping="yes"/>
   </xsl:template>
</xsl:stylesheet>

Output in MSXML and other parsers:
<?xml version="1.0" encoding="UTF-8"?>
<Person PersonID="5123456">
<ContactInfo>
<Email><![CDATA[person@xxxxxxxx]]></Email>
<Phone><![CDATA[111-111-1111]]></Phone>
</ContactInfo>
</Person>

Output in Xalan:
<?xml version="1.0" encoding="UTF-8"?>
<Person PersonID="5123456">
<ContactInfo>
<Email><![CDATA[person@xxxxxxxx]]></Email>
<Phone><![CDATA[111-111-1111]]></Phone><![CDATA[
     ]]><![CDATA[
     ]]><![CDATA[
   ]]></ContactInfo><![CDATA[
   ]]><![CDATA[
]]></Person>


Thanks,
Jesse

Current Thread