Понятно, этот вопрос чисто академический. К счастью, у него есть очень определенный ответ.
Вы не можете избежать конечной последовательности CDATA. Правило 20 производства спецификации XML совершенно ясно:
[20] CData ::= (Char* - (Char* ']]>' Char*))
РЕДАКТИРОВАТЬ: Это правило продукта буквально означает "раздел CData может содержать все, что вы хотите, но последовательность"]]> ". Нет исключения.".
EDIT2: тот же раздел также читает:
В разделе CDATA только строка CDEnd распознается как разметка, поэтому левые угловые скобки и амперсанды могут встречаться в их буквальной форме; они не должны (и не могут) быть экранированы, используя "<
" и "&
". Разделы CDATA не могут быть вложенными.
Другими словами, невозможно использовать ссылку на сущность, разметку или любую другую форму интерпретируемого синтаксиса. Единственный анализируемый текст в разделе CDATA - ]]>
, и он завершает раздел.
Следовательно, невозможно вырваться из ]]>
в секции CDATA.
EDIT3: тот же раздел также читает:
2,7 Разделы CDATA
[Определение: разделы CDATA могут появляться везде, где могут встречаться символьные данные; они используются для экранирования блоков текста, содержащих символы, которые иначе были бы распознаны как разметка. Разделы CDATA начинаются со строки "<! [CDATA [" и заканчиваются строкой "]]>":]
Тогда может быть раздел CDATA, где бы ни находились символьные данные, включая несколько смежных разделов CDATA вместо одного раздела CDATA. Это позволяет разделить токен ]]>
и поместить его две части в смежные секции CDATA.
например:
<![CDATA[Certain tokens like ]]> can be difficult and <invalid>]]>
должно быть записано как
<![CDATA[Certain tokens like ]]]]><![CDATA[> can be difficult and <valid>]]>