CDATA - текстовые данные XML

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

Однако текст внутри секции CDATA парсером игнорируется.

PCDATA - Анализируемые символьные данные

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

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


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

Это делается по той причине, что XML элементы могут содержать другие элементы.

Например, в следующем примере элемент <name> содержит еще два элемента (first и last):


<name><first>Bill</first><last>Gates</last></name>

и парсер разобьет его на подэлементы следующим образом:


<name>
   <first>Bill</first>
   <last>Gates</last>
</name>

Анализируемые символьные данные (PCDATA) - это термин, используемый по отношению к текстовым данным, которые подвергаются анализу и разбору XML парсером.

CDATA - (Неанализируемые) Символьные данные

Термин CDATA используется по отношению текстовых данных, которые не должны анализироваться и разбираться XML парсером.

Символы вроде "<" и "&" недопустимы внутри XML элементов.

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

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

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

Все что расположено внутри секции CDATA полностью игнорируется парсером.

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


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

В приведенном примере все текстовые данные внутри секции CDATA будут игнорироваться парсером.

Обратите внимание на особенность секции CDATA:

Секция CDATA не может содержать строку "]]>".
Вложенные секции CDATA запрещены.
Символы "]]>", обозначающие конец секции CDATA, не должны содержать пробельные символы или символы конца строки.