Как и HTML, XML использует угловые скобки и амперсанд для разметки тегов, поэтому эти символы нельзя вставлять в текстовое содержимое «как есть» — документ перестанет быть валидным XML, и парсер выдаст ошибку вместо того, чтобы просто проигнорировать проблему.
Пять обязательных entity
В отличие от HTML, где определены сотни именованных entity, спецификация XML требует только пять:
<— вместо<>— вместо>&— вместо&'— вместо одинарной кавычки'"— вместо двойной кавычки"
Кавычки обязательно экранировать только внутри значений атрибутов, а < и & — в любом текстовом содержимом.
Где это встречается на практике
Формат обмена «1С:Предприятие» строится на XML, и любое название товара или контрагента с амперсандом (например, «Иванов & Партнёры») ломает выгрузку, если не экранировано. Та же проблема — в RSS-лентах новостных сайтов: заголовок статьи с необработанным & делает всю ленту невалидной для агрегаторов.
Чем XML строже HTML
Браузеры обычно «прощают» невалидный HTML и пытаются отобразить страницу вопреки ошибкам. XML-парсеры так не делают: один неэкранированный амперсанд или угловая скобка — и весь документ считается невалидным, обработка прекращается с ошибкой.
Когда это нужно
- Подготовка текста с пользовательскими данными перед вставкой в XML-документ (фиды, конфигурации, SOAP-сообщения).
- Диагностика: увидеть «сырой» текст, скрытый за entity в полученном XML.
- Ручное редактирование XML-файлов, где важно не сломать структуру документа.
Альтернатива entity: секция CDATA
Если текстовый блок содержит много спецсимволов (например, фрагмент HTML или кода внутри XML), удобнее обернуть его в <![CDATA[...]]> — внутри этой секции < и & не требуют экранирования и воспринимаются как обычный текст. Исключение — последовательность ]]>, которая закрывает CDATA и не может встречаться в содержимом самой секции.