Указывает ли спецификация XML, что синтаксическому анализатору необходимо преобразовывать \ n \ r в \ n всегда, даже когда \ n \ r появляется в разделе CDATA? - PullRequest
2 голосов
/ 12 мая 2010

Я наткнулся на проблему с обработкой символов \ line-feed и \ carriage-return в xml. Я знаю, что в соответствии с http://www.w3.org/TR/REC-xml/#sec-line-ends, процессоры xml необходимы для замены любых последовательностей "\ n \ r" или одиноких "\ r" на "\ n".
В спецификации говорится, что это должно быть поведение для обработки любой «внешней анализируемой сущности», относится ли это также к разделам CDATA внутри элемента?
спасибо,

Michele

Я уверен, что библиотека msxml, например, преобразует каждую последовательность \ n \ r "или одинокий" \ r "в" \ n ", независимо от того, находятся они в разделе cdata или нет.

Ответы [ 2 ]

3 голосов
/ 12 мая 2010

Я процитирую предложение из раздела, на который вы ссылаетесь (выделено мной):

Чтобы упростить задачи приложений, процессор XML должен вести себя так, как будто он нормализовал все разрывы строк во внешнем проанализированные объекты (включая объект документа) на входе, перед парсинг , переводя оба двухсимвольная последовательность #xD #xA и любой #xD за которым не следует #xA до одного символа #xA.

Поскольку процессор XML делает это перед анализом, он еще не знает, какие части документа являются разделами CDATA. Поэтому он будет выполнять замену независимо от того, находятся ли символы в разделе CDATA или нет.

Чтобы надежно сохранить эти символы, они должны быть записаны в XML-документ как 
 и 
 сущности.

1 голос
/ 12 мая 2010

Да - "\ n \ r" или "\ r" в разделах CDATA должны быть заменены на "\ n", чтобы процессор соответствовал требованиям. Любые разделы CDATA в вашем XML-документе будут частью сущности документа, которая анализируется. Вы можете найти пример неразобранного объекта здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...