Раздел CDATA технически может содержать другой начальный тег - <![CDATA[
- он просто интерпретируется как символьные данные. Чего он не может содержать, так это ]]>
. Обычный подход заключается в разделении CDATA на ]]>
в предоставленных пользователем данных при кодировании. От Википедия :
Раздел CDATA не может содержать строку "]]>", и поэтому раздел CDATA не может содержать вложенные разделы CDATA. Предпочтительный подход к использованию разделов CDATA для кодирования текста, содержащего триаду «]]>», заключается в использовании нескольких разделов CDATA путем разделения каждого вхождения триады непосредственно перед «>». Например, для кодирования "]]>" можно написать:
<![CDATA[]]]]><![CDATA[>]]>
Это означает, что для кодирования "]]>" в середине раздела CDATA замените все вхождения "]]>" следующим:
]]]]><![CDATA[>
Это эффективно останавливает и перезапускает раздел CDATA.
[конец цитаты из Википедии]
Видишь, что это делает? Фактически, в итоге вы получите:
<![CDATA[ ]] ]]>
<![CDATA[ > ]]>
(Пробелы добавлены для акцентирования.) Таким образом, вы получите ]]>
, закодированный как ]]
рядом с >
- при объединении во время декодирования вашим XML-процессором вы получите ]]>
в качестве символьных данных, но ]]>
фактически никогда не встречается в вашем разделе CDATA.
Однако, не должно быть никакой необходимости, в наше время, чтобы вы беспокоились об этом . Какой бы инструмент / библиотека вы не использовали для создания XML, он должен просто управлять вами, и если вы добавляете символьные данные в элемент вашего XML, преобразование в символьные данные должно выполняться автоматически так, как библиотека XML сочтет нужным, с все необходимые побеги, не думая об этом.
Хорошо беспокоиться о злонамеренных пользовательских данных, но лучший способ справиться с ними в этом случае - правильно использовать зрелую библиотеку, где кто-то уже беспокоился об этом за вас.