Документация / XML

Текст, символы и сущности

Символы и кодировки

XML-документ — это текст в Unicode. Процессоры обязаны понимать UTF-8 и UTF-16; другие кодировки (например, windows-1251) допускаются, если указаны в объявлении XML. Для обмена данными используйте UTF-8: это кодировка по умолчанию, и она не требует объявления.

Экранирование и предопределённые сущности

Пять символов имеют в XML особый смысл. Для них есть предопределённые сущности:

СимволСущностьГде экранировать обязательно
<&lt;Везде в тексте и значениях атрибутов
&&amp;Везде в тексте и значениях атрибутов
>&gt;В последовательности ]]> в тексте; в остальных местах — по желанию
"&quot;В значении атрибута в двойных кавычках
'&apos;В значении атрибута в одинарных кавычках

Ссылки на символы

Любой символ Unicode можно записать по коду: &#8381; (десятичный) или &#x20BD; (шестнадцатеричный) — это знак рубля ₽. Ссылки на символы удобны для невидимых и редких символов: неразрывного пробела &#160;, длинного тире &#8212;.

<?xml version="1.0" encoding="UTF-8"?>
<price>
  <amount>3&#160;490</amount>
  <currency>&#x20BD;</currency>
  <condition>Если сумма &lt; 1000 &amp; доставка &gt; 0, скидки нет</condition>
</price>

Секции CDATA

Секция <![CDATA[ … ]]> — фрагмент текста, внутри которого разметка не распознаётся: < и & можно писать как есть. Удобно для вставки кода, HTML или SQL. Внутри CDATA не может встречаться последовательность ]]>.

<?xml version="1.0" encoding="UTF-8"?>
<query>
  <sql><![CDATA[SELECT * FROM orders WHERE total > 1000 AND status <> 'cancelled']]></sql>
</query>

Комментарии

<!-- комментарий --> — может стоять где угодно вне тегов. Внутри комментария нельзя писать два дефиса подряд --, а комментарий не может заканчиваться на --->. Процессоры не обязаны передавать комментарии приложению, поэтому не храните в них данные.

Инструкции обработки

<?цель данные?> — указание конкретному приложению. Самая известная — подключение таблицы стилей:

<?xml-stylesheet type="text/xsl" href="order.xsl"?>

Объявление <?xml … ?> в начале документа похоже на инструкцию обработки, но ею не является.

Пробелы и переводы строк

  • Процессор передаёт приложению все пробельные символы в содержимом элементов; какие из них значимы — решает приложение (или атрибут xml:space).
  • Переводы строк нормализуются: CR LF и одиночный CR превращаются в LF. Поэтому файлы из Windows и Linux читаются одинаково.
  • Пробелы между элементами, которые нужны только для отступов, называют «незначимыми»; при валидации по DTD процессор может их отбросить.

Обновлено: 30 сентября 2026 г.