The key differences between CDATA and comments are:
- As Richard points out, CDATA is still part of the document, while a comment is not.
- In CDATA you cannot include the string
CDEnd), while in a comment
- Parameter Entity references are not recognized inside of comments.
This means given these four snippets of XML from one well-formed document:
<!ENTITY MyParamEntity "Has been expanded">
<!-- Within this comment I can use ]]> and other reserved characters like < &, ', and ", but %MyParamEntity; will not be expanded (if I retrieve the text of this node it will contain %MyParamEntity; and not "Has been expanded") and I can't place two dashes next to each other. -->
<![CDATA[ Within this Character Data block I can use double dashes as much as I want (along with <, &, ', and ") *and* %MyParamEntity; will be expanded to the text "Has been expanded" ... however, I can't use the CEND sequence. If I need to use CEND I must escape one of the brackets or the greater-than sign using concatenated CDATA sections. ]]>
<description>An example of escaped CENDs</description> <!-- This text contains a CEND ]]> --> <!-- In this first case we put the ]] at the end of the first CDATA block and the > in the second CDATA block --> <data><![CDATA[This text contains a CEND ]]]]><![CDATA[>]]></data> <!-- In this second case we put a ] at the end of the first CDATA block and the ]> in the second CDATA block --> <alternative><![CDATA[This text contains a CEND ]]]><![CDATA>]]></alternative>