xsl-list
[Top] [All Lists]

Wrapping all elements in CDATA

2004-04-22 00:26:41

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(_at_)test(_dot_)com</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(_at_)test(_dot_)com]]></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(_at_)test(_dot_)com]]></Email>
<Phone><![CDATA[111-111-1111]]></Phone><![CDATA[
     ]]><![CDATA[
     ]]><![CDATA[
   ]]></ContactInfo><![CDATA[
   ]]><![CDATA[
]]></Person>


Thanks,
Jesse
 




<Prev in Thread] Current Thread [Next in Thread>