какие символы нельзя использовать в xml

Правила синтаксиса XML

Правила синтаксиса XML крайне просты и логичны. Их легко запомнить и легко использовать.

Все XML элементы должны иметь закрывающий тег

В HTML некоторые элементы могут не иметь закрывающего тега:

В XML нельзя опускать закрывающий тег. Абсолютно все элементы должны закрываться:

Возможно, вы заметили из предыдущих примеров, что XML декларация не имеет закрывающего тега. Это не ошибка. Дело в том, что декларация не относится к XML документу, поэтому у нее и нет закрывающего тега.

Теги XML регистрозависимы

Открывающий и закрывающий теги должны определяться в одном регистре:

Замечание: «Открывающий и закрывающий теги» иногда еще называют «начальный и конечный теги». Используйте то определение, которое вам более симпатично. По сути это одно и то же.

XML элементы должны соблюдать корректную вложенность

В HTML иногда можно наблюдать такую картину:

и иногда это даже работает должным образом.

В XML все элементы обязаны соблюдать корректную вложенность:

Понятие «корректная вложенность» по отношению к приведенным примерам просто означает, что так как элемент открывается внутри элемента , то и закрываться он должен внутри элемента .

У XML документа должен быть корневой элемент

XML документ должен содержать один элемент, который будет родительским для всех других элементов. Он называется корневым элементом.

XML пролог

Следующая строка называется XML прологом:

XML пролог необязателен. Но если он есть, то это должна быть первая строка XML документа.

В XML документе могут присутствовать международные символы, вроде русских букв, и чтобы не возникало ошибок необходимо указать кодировку, либо сохранить XML файл в формате UTF-8.

UTF-8 — кодировка XML документов по умолчанию.

Значения XML атрибутов должны заключаться в кавычки

Так же, как и в HTML, у XML элементов могут быть атрибуты в виде пары имя/значение.

В XML значения атрибутов должны заключаться в кавычки.

Посмотрите на следующие два примера XML документа. Первый с ошибкой, второй написан правильно:

Ошибка в первом XML документе заключается в том, что значение атрибута date элемента note не заключено в кавычки.

Сущности

Некоторые символы в XML имеют особые значения.

Если вы поместите, например, символ «>больше, чем&&амперсанд‘‘апостроф««кавычки

Замечание: Только символы » » допустим, но лучше его всегда заменять на сущность.

Комментарии в XML

Синтаксис комментариев в XML такой же, как и в HTML.

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

Странно, но так можно:

В XML пробелы сохраняются

В HTML несколько последовательных пробельных символов усекаются до одного. В XML документе все пробельные символы сохраняются.

В XML новая строка сохраняется как LF

В приложениях Windows новая строка хранится в следующем виде: символ перевода каретки и символ новой строки (CR+LF).

Unix и Mac OSX используют LF.

Старые Mac системы используют CR.

XML сохраняет новую строку как LF.

Синтаксически верный XML документ

Если XML документ составлен в соответствии с приведенными синтаксическими правилами, то говорят, что это «синтаксически верный» XML документ.

Источник

Недопустимые символы и правила экранирования

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

Предложение FOR XML и недопустимые символы

SQL Server преобразует недопустимые XML-символы в сущности, когда они возвращаются в запросах FOR XML, не содержащих директивы TYPE.

Хотя синтаксические анализаторы, следующие стандарту XML 1.0, будут выводить ошибку независимо от того, преобразованы ли такие символы в сущности, это поведение более соответствует XML 1.1. Представление таких символов в виде сущностей также может оказаться более согласованным с будущими версиями стандарта XML. Кроме того, таким образом упрощается отладка, так как становится виден элемент кода, содержащий недопустимый символ.

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

Следующие символы пробела в результатах запросов FOR XML преобразуются в сущности иным образом с целью их сохранения для обратных преобразований.

В содержимом и атрибутах элементов: hex(0D) (возврат каретки)

В содержимом атрибутов: hex(09) (табуляция), hex(0A) (перевод строки)

Данные символы сохраняются в выходе, и средство синтаксического анализа не выполняет их нормализацию.

Правила экранирования

Есть только два небуквенных символа, которые могут встречаться в имени XML: двоеточие (:) и подчеркивание (_). Так как двоеточие уже зарезервировано для пространств имен, в качестве escape-символа используется подчеркивание. Далее перечислены правила кодирования недопустимых символов.

Все символы UCS-2, которые не могут входить имена XML в соответствии со стандартом XML 1.0, экранируются как _xHHHH_. Здесь сочетание HHHH будет замещено на четырехразрядный шестнадцатеричный код символа в UCS-2, где самым старшим является первый разряд. Например, имя таблицы Order Details будет закодировано как Order_x0020_Details.

Символы, не входящие в диапазон UCS-2 (дополнения UCS-4 в диапазоне от U+00010000 до U+0010FFFF), кодируются как _xHHHHHHHH_. Здесь сочетание HHHHHHHH будет замещено на восьмиразрядный шестнадцатеричный код символа в UCS-4, если используется режим обратной совместимости с SQL Server 2000. В иных случаях символы кодируются как _xHHHHHH_в целях соответствия стандарту ISO.

Символ нижнего подчеркивания не нуждается в экранировании, если за ним не следует символ x. Например, имя таблицы Данные заказа не будет закодировано.

Двоеточие в идентификаторах не кодируется. Поэтому запрос FOR XML может формировать элемент пространства имени и имена атрибутов. Например, следующий запрос формирует атрибут пространства имен с двоеточием в имени:

Результат этого запроса будет таким:

Обратите внимание, что для добавления пространств имен XML рекомендуется использовать предложение WITH XMLNAMESPACES.

Источник

Какие символы мне нужно избежать в XML-документах?

какие символы должны быть экранированы в XML-документах, или где я могу найти такой список?

9 ответов

если вы используете соответствующий класс или библиотеку, они сделают побег для вас. Многие проблемы XML вызваны конкатенацией строк.

XML escape-символы

экранирование символов зависит от того, где используется специальный символ.

примеры могут быть проверены на служба проверки разметки W3C.

текст

атрибуты

безопасный способ-избежать всех пяти символов в атрибутах, однако, > символ не должен быть экранирован в атрибутах:

на ‘ символ не должен быть экранирован в атрибутах, если кавычки » :

кроме того, » не нужно бежать в атрибуты, если кавычки ‘ :

комментарии

все 5 специальных символов не должен избежать в комментариях:

CDATA

все 5 специальных символов не должен сбежать в CDATA разделы:

инструкции по обработке

все 5 специальных символов не должен быть экранированным в обработке XML инструкции:

в XML и в HTML

в HTML есть собственный набор кодов эвакуации, которые охватывают гораздо больше персонажей.

возможно, это поможет:

в документах SGML, HTML и XML, логические конструкции, известные как character данных и значения атрибутов состоят из последовательности символов, в которых каждый характер может проявиться напрямую (представляя себя), или может быть представлен серией символов называется символьная ссылка, из которой есть два типа: числовой ссылка на символ и символ ссылка на сущность. В этой статье перечислены сущность символа ссылается на то, что действительны в документах HTML и XML.

в этой статье перечислены следующие пять предопределенных объектов XML:

согласно спецификациям Консорциума Всемирной паутины (w3C),есть 5 символов, которые не должны отображаться в их буквальном виде в XML-документе, за исключением случаев использования в качестве разделителей разметки или в комментарии, инструкции по обработке или разделе CDATA. Во всех остальных случаях эти символы должны быть заменены либо с помощью соответствующей сущности, либо с помощью числовой ссылки в соответствии со следующей таблицей:

Оригинал Характер замена сущности XML XML числовая замена

> > >
» » »
& & &
‘ ‘ ‘

обратите внимание, что вышеупомянутые сущности могут использоваться также в HTML, за исключением , который был введен с XHTML 1.0 и не объявлен в HTML 4. По этой причине и для обеспечения ретро-совместимости, спецификация XHTML рекомендует использовать ‘ вместо.

экранирование символов отличается для тегов и атрибутов.

символ амперсанда (&) и левая угловая скобка ( ) может быть представлена с помощью строка » > » и для совместимости должна быть экранирована с помощью либо «>»или ссылка на символ, когда он появляется в строке»]] > «в содержимом, когда эта строка не помечает конец CDATA раздел.

разрешить значения атрибутов содержать как одинарные, так и двойные кавычки, этот Апостроф или символ одинарной кавычки ( ‘ ) может быть представлен как » «и двойные кавычки («) как «» «.

в дополнение к общеизвестным пяти символам [, &, «, ‘] я бы также избежал символа вертикальной вкладки (0x0B). Он действителен UTF-8, но не действителен XML 1.0, и даже многие библиотеки (включая libxml2) пропускают его и молча выводят недопустимый XML.

новый, упрощенный ответ на старый, часто задаваемый вопрос.

упрощенный XML Escaping

существует пять предопределенных сущностей:

«все разрешенные символы Юникода могут быть представлены в числовой ссылки. «Например:

большинство управляющих символов и других диапазонов unicode специально исключены, что означает (Я думаю), что они не могут произойти либо экранированы, либо прямой:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *