Источник: www.frnet.narod.ru
Вся текстовая информация в XML-документе, по умолчанию, подлежит обработке анализатором. Однако, сущестует возможность запретить анализ конкретных частей документа. Т.о. текстовые данные делятся на два вида PCDATA и CDATA, первый вид данных подлежит анализу, второй – игнорируется анализаотором.
PCDATA – Parsed Character DataPCDATA – анализируемые символьные данные. По умолчанию весь XML-документ состоит из них.
Когда XML-документ проходит через анализатор его содержимое разбивается на теги. Содержимое этих тегов так же подлежит анализу и так до тех пор, пока анализатор не найдет вложенных тегов. За счет такого анализа мы и имеем возможность просмотра XML-документа в виде древовидной структуры.
<message>Добрый день.</message>
В приведенной примере сообщение «Добрый день» будет обрабатываться анализатором, так как вместо обычного текста в теге <message> могли находится также и другие теги. Рассмотрим следующую строку:
<message> <title>Тема доклада</title> <to>teacher@gmail.com</to> <text>Измерение показателя преломления</text> </message>
Данную строку анализатор разобьет на составляющие и ее содержимое представит в виде структуры:
<message> <title>Тема доклада</title> <to>teacher@gmail.com</to> <text>Измерение показателя преломления</text> </message>
Т.о. использовать данные в виде PCDATA, следует в том случае, когда вам нужно, чтобы XML-анализатор их обрабатывал.
CDATA – (Unparsed) Character DataCDATA – (неанализируемые) символьные данные. Указывая этот вид данных, мы даем команду анализатору не интерпретивать их как XML-данные, а использовать их как обычный текст, независимо от того, какие символы могут встречаться внутри блока.
Такие символы как «<» и «&» могут вызвать ошибку при обработке. Символ «<» для анализатора является началом нового элемента (тега), а «&» - началом описания символа (например: &).
Для того, что бы избежать подобных ошибок, например при описании программы на JavaScript, нужно дать указание XML-анализатору, что бы он считал это описание как CDATA.
Блоки CDATA начинаются с конструкции <![CDATA[ и заканчиваются ]]>, например:
<script> <![CDATA[ function pos_sum(a, b) { if (a > 0 & b > 0) { return a+b; } else { return 0; } } ]]> </script>
В приведенном примере, указанные выше символы будут игнорироваться анализатором. Блок CDATA не может содержать в себе последовательность символов ]]>, так как она будет интерпретироваться как окончание блока. Стоит помнить, что границы CDATA должны быть описаны как есть, т.е. нельзя включать в эти последовательности пробелы или переносы строк.
Пример вы можете скачать по ссылке: http://www.frnet.narod.ru/script/article/0052.zip