for testing
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item><![CDATA[<]]></item>
<item><![CDATA[>]]></item>
<item><![CDATA[&]]></item>
<item><![CDATA["]]></item>
<item><![CDATA[']]></item>
<item>Mc Donold's
</item>
<item>Siegfried & Roy
</item>
<item>a >b
</item>
<item>a <b
</item>
</root>
xsl
<?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" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="root"/>
</xsl:template>
<xsl:template match="root">
<root>
<xsl:apply-templates select="item"/>
</root>
</xsl:template>
<xsl:template match="item">
<item>
<xsl:variable name="pos">'</xsl:variable>
<xsl:choose>
<xsl:when test="contains(.,'<')">
<xsl:value-of select="concat('<![CDATA[',.,']]>')"/>
</xsl:when>
<xsl:when test="contains(.,'>')">
<xsl:value-of select="concat('<![CDATA[',.,']]>')"/>
</xsl:when>
<xsl:when test="contains(.,'&')">
<xsl:value-of select="concat('<![CDATA[',.,']]>')"/>
</xsl:when>
<xsl:when test="contains(.,'"')">
<xsl:value-of select="concat('<![CDATA[',.,']]>')"/>
</xsl:when>
<xsl:when test="contains(.,$pos)">
<xsl:value-of select="concat('<![CDATA[',.,']]>')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</item>
</xsl:template>
</xsl:stylesheet>
result
<?xml version="1.0" encoding="utf-8"?>
<root>
<item><![CDATA[<]]></item>
<item><![CDATA[>]]></item>
<item><![CDATA[&]]></item>
<item><![CDATA["]]></item>
<item><![CDATA[']]></item>
<item><![CDATA[Mc Donold's
]]></item>
<item><![CDATA[Siegfried & Roy
]]></item>
<item><![CDATA[a >b
]]></item>
<item><![CDATA[a <b
]]></item>
</root>
Helmut Hagemann