CDATA

Рубрика: Язык разметки XML

Здравствуйте, уважаемые посетители сайта okITgo.ru! Настоящая статья посвящена XML парсингу (разбору) и тому, как добавить в документ информацию, которую парсер разбирать не должен.

Весь текст в XML документе будет разобран парсером.

Но текст внутри секции CDATA парсер проигнорирует.


PCDATA – Разбираемые Символьные Данные

XML парсеры обычно разбирают весь текст в XML документе.

Когда XML элемент разбирается, текст между XML тегами также подвергается разбору (парсингу):

<message>Этот текст также разбирается</message>

Парсер поступает так, поскольку XML элементы могут содержать другие элементы, как в этом примере, где элемент <name> содержит два других элемента (first и last):

<name><first>Билл</first><last>Гейтс</last></name>

и парсер разобьет его на подэлементы, примерно так:

<name>
 <first>Билл</first>
 <last>Гейтс</last>
</name>

Разбираемые Символьные Данные (Parsed Character Data или PCDATA) – это термин, используемый для текстовых данных, которые будут разобраны XML парсером.


CDATA – (Неразбираемые) Символьные Данные

Термин CDATA (Character Data – Символьные Данные) используется для обозначения текстовых данных, которые XML парсер не должен разбирать.

Такие символы как "<" и "&" являются незаконными в XML элементах.

Символ "<" будет генерировать ошибку, поскольку парсер будет интрепретировать его как начало нового элемента.

Символ "&" будет генерировать ошибку, поскольку парсер будет интрепретировать его как начало специального символа.

Некоторые текстовые данные, например код JavaScript, могут содержать множество символов "<" или "&". Чтобы избежать ошибок, код скрипта может быть определен как CDATA.

Все, что находится внутри секции CDATA, игнорируется парсером.

Секция CDATA начинается с "<![CDATA[" и заканчивается на "]]>":

<script>
<![CDATA[
function matchtwo(a,b)
{
if (a < b && a < 0) then
 {
 return 1;
 }
else
 {
 return 0;
 }
}
]]>
</script>

В примере выше все, что находится внутри секции CDATA, будет проигнорировано xml парсером.

Замечания по секциям CDATA:

Секция CDATA не может содержать строку "]]>". Вложенные секции CDATA не допустимы.

Последовательность символов "]]>", которая обозначает конец секции CDATA, не может содержать пробелов и переносов строки.

Спасибо за внимание и до новых встреч на страницах сайта okITgo.ru!

Отзывов (2) на «CDATA»

  1. krogus пишет:

    Может ли CDATA использоваться для размещения вируса или редиекта – например iframe. Или как промежуточный контейнер для хранения вредных ссылок.
    У себя на сайте обнаружил в блоке CDATA длинную строку закодированную в base64 – не нравится мне эта строка.

  2. Николай пишет:

    Блок CDATA используется для размещения любых символьных данных, которые не разбираются парсером XML, т.е. в этом блоке может содержаться все что угодно – и HTML-теги iframe, и скрипты JavaScript, соответственно и вредоносная информация.