Екранування в XML: амперсанд, дужки та лапки
XSDHub · 4 листопада 2026 року
Що означає проблема
Амперсанд у XML починає посилання на сутність або символ. Тому назву A & B не можна просто записати між початковим і кінцевим тегами. Запис A & B є коректним: після синтаксичного аналізу одержувач отримує звичайний амперсанд. Саме цю різницю демонструють два приклади нижче, для яких схема не потрібна.
З чого почати перевірку
Символ < відкриває розмітку, тож у текстових даних використовуйте <. Символ > переважно дозволений без заміни, однак послідовність ]]> не може бути звичайним текстовим вмістом. Не екрануйте дужки справжніх тегів: замість дерева елементів отримаєте текстове представлення XML, яке вже не відповідає очікуваній структурі.
Як працює приклад
Для атрибутів набір необхідних замін залежить від обмежувальних лапок. Подвійну лапку всередині значення в подвійних лапках передають як ", а одинарну в одинарних — як '. Використовуйте засіб серіалізації XML, який розрізняє текстовий вузол і значення атрибута. Ланцюжок ручних замін легко обробляє власний результат повторно.
На що звернути увагу
Подвійне екранування не завжди спричиняє синтаксичну помилку. Наприклад, &amp; успішно читається, але дає буквальний текст & замість одного амперсанда. Порівнюйте значення після розбору документа зі значенням у вихідній системі. Самого повідомлення про коректний синтаксис недостатньо, щоб виявити спотворення даних через повторну серіалізацію.
Як застосувати виправлення
Секція CDATA дозволяє вміст із дужками та амперсандами, але завершується послідовністю ]]> і не дозволяє заборонених керувальних символів. Вона також не перетворює текст на вкладені елементи. Для звичайного найменування компанії достатньо стандартного екранування без DTD. Перевірте обидва документи, виправте амперсанд і простежте, щоб експорт з інших систем не виконував цю саму заміну вдруге.
Перевірте приклади самостійно
Відкрити безкоштовний інструмент. Порівняйте помилковий і виправлений документи. Використовуйте режим синтаксису XML.
XML з помилкою — очікується відмова
<company>A & B</company>Виправлений XML — очікується успіх
<company>A & B</company>