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="'<![CDATA['" />
<xsl:variable name="CDATAEnd" select="']]>'" />
<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