All tags which contain the messages are to be CDATA'd, because very often they contain special characters
if your real goal is to represent special characters in your XML document, then problem doesn't lie in the parsing of these characters, but rather in their encoding.
CDATA
<![CDATA[ your data ]]>
deals primarily with the fact that some contents of a (XML) Document will not have to get parsed, otherwise some errors may be found. En example would be:
<a>
<id>my_id</id>
<tr>& content a </tr>
<tr> < content b < </tr>
</a>
as the document get parsed, its content (i.e the text withing your tags)also get parsed. both content
& content a
and
< content b <
will be seen as parsing errors because of the characters "&" and "<". In order to avoid it , you don't want some content to get parsed. That's why you declare in your tag, in order to tell the parser to refrain from parsing them.
DTD and XSD are all about defining a structure for your XML document and don't provide explicitly a way to encode your characters(only XSD does it but rather for binary data element types). they help you defining which element type (String,Int, Double, and so on) your XML Document will be used , but leave the encoding issue for you.
this is cleary an encoding issue , rather than a parsing one.