Вы даже можете избежать escape-символов (при наличии правильных узлов xml в блоках CDATA!), Применив следующее:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:dt="http://exslt.org/dates-and-times"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="dt exsl">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>
, которое при применении к
<?xml version="1.0" encoding="UTF-8"?>
<mymessage><![CDATA[<xyz>1234</xyz>]]></mymessage>
дает
<?xml version="1.0" encoding="utf-8"?>
<mymessage><xyz>1234</xyz></mymessage>
В общем, это, конечно, не рекомендуется (блок CDATA был помещен туда по причине), поэтому лучше не указывать текст, соответствующий шаблону ().В этом случае результат будет
<?xml version="1.0" encoding="utf-8"?>
<mymessage><xyz>1234</xyz></mymessage>