Ошибка XML · prolog
XML-декларация только в начале документа
Перед XML-декларацией есть пробельные символы. Достаточно одной пустой строки или одного пробела, чтобы документ перестал быть правильно построенным.
XML declaration allowed only at the start of the document (line 2)Что это значит
XML-декларация должна быть самым первым, что есть в документе, — ни пробела, ни перевода строки перед ней. Это строже правила для содержимого перед корневым элементом, где пробелы допустимы.
Виновник почти всегда невидим, поэтому документ выглядит правильным в редакторе и отвергается каждым парсером.
Обычные причины
- Пустая строка или пробел перед <?xml, добавленные шаблоном или редактором.
- BOM UTF-8 перед декларацией — три байта, которых не видно.
- Включаемый файл, добавляющий перевод строки перед основным содержимым.
- Заголовки PHP или шаблонизатора, выводящие пробел до начала документа.
Как исправить
- Удалите всё до <?xml — файл должен начинаться именно с этих символов.
- Сохраняйте файл как UTF-8 без BOM.
- Проверьте включаемые файлы и шаблоны на завершающие переводы строк после закрывающего тега.
- Посмотрите файл в шестнадцатеричном виде: невидимые байты в текстовом редакторе не видны по определению.
Та же ошибка в других парсерах
Разные парсеры, один и тот же дефект. Сообщения не переведены — вы искали именно их текст.
Xerces (Java)
Content is not allowed in prolog.expat (Python)
XML or text declaration not at start of entity: line 2, column 0.NET System.Xml
Data at the root level is invalid. Line 2, position 1.
До и после
Оба фрагмента проверяются тестами на настоящем парсере: первый выдаёт в точности сообщение выше, второй разбирается без ошибок.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"/><?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"/>