Экранирование символов в XML: амперсанд и кавычки
XSDHub · 4 ноября 2026 года
Причина и контекст
В текстовом содержимом XML амперсанд начинает ссылку на сущность или символ. Поэтому обычное название компании A & B нельзя вставлять в элемент без экранирования. Запись & представляет один амперсанд после разбора документа. Пример с голым символом отклоняется парсером ещё до проверки схемы.
Что проверить в документе
Знак меньше начинает разметку, поэтому в обычном тексте его записывают как <. Знак больше обычно допустим, однако последовательность ]]> запрещена в обычных символьных данных. Для единообразия генераторы часто используют >. Не заменяйте угловые скобки настоящих тегов: тогда вместо структуры получится текст с изображением разметки.
Разбор примера
В значениях атрибутов дополнительно учитывайте выбранные ограничивающие кавычки. Внутри двойных кавычек двойную кавычку передают через ", внутри одинарных — через '. Экранирование текста и экранирование атрибутов решают близкие задачи, но требуют разных наборов замен. Надёжнее поручить сериализацию XML-библиотеке, чем последовательно заменять строки вручную.
Как найти источник ошибки
Повторное экранирование меняет данные. Если готовую последовательность & обработать ещё раз, появится &amp;, а получатель увидит буквальные символы «&». Проверяйте результат после разбора, а не только исходную строку. Успешный синтаксис сам по себе не обнаружит такое смысловое искажение.
Особые случаи
Секция CDATA позволяет записывать амперсанды и угловые скобки как текст, но не допускает внутри закрывающую последовательность ]]> и не отменяет запрет управляющих символов. Она также не создаёт вложенные XML-элементы. Применяйте её только там, где схема и получатель ожидают текстовое значение.
Порядок исправления
Откройте синтаксический режим, сравните два примера и исправьте ровно один амперсанд. После исправления проверьте отображаемое значение в системе получателя. Предопределённые сущности работают без DTD; объявлять внешние сущности для этой задачи не требуется и в локальном инструменте запрещено.
Воспроизведите результат
Открыть инструмент для этих примеров. Сначала проверьте вариант с ошибкой, затем исправленный документ. Выберите проверку синтаксиса без схемы.
XML с ошибкой — ожидается отказ
<company>A & B</company>Исправленный XML — ожидается успех
<company>A & B</company>