Skip to main content

Ошибка XML · syntax

Ожидался открывающий тег

Пришло не то — HTML-страница с ошибкой, JSON или обычный текст, отданные под XML-типом содержимого. Парсер не нашёл открывающего тега.

Start tag expected, '<' not found (line 1)

Что это значит

Парсер не обнаружил открывающего тега там, где должен начинаться документ, потому что содержимое вообще не начинается с «<». На практике ответ — не XML: тело JSON, текстовая ошибка или трассировка стека, отданные с XML-типом содержимого.

Совершенно пустое тело даёт другое сообщение — «Document is empty». Здесь что-то пришло, просто это не XML.

Обычные причины

  • Страница входа, капча или страница ошибки вместо API-ответа.
  • Ответ 4xx или 5xx с HTML-телом, отданный без проверки кода состояния.
  • BOM или пробелы перед началом документа при строгой проверке.
  • Прокси или WAF, подменивший ответ своей страницей.
  • Ответ, распакованный неверно, из-за чего вместо XML пришли двоичные данные.

Как исправить

  • Логируйте первые 200 байт ответа перед разбором — обычно этого достаточно, чтобы увидеть причину.
  • Проверяйте код состояния и Content-Type до того, как отдавать тело парсеру.
  • Обрабатывайте «пришёл не XML» как отдельный случай: это проблема транспорта, а не документа.
  • Убедитесь, что перенаправления следуют туда, куда вы ожидаете.

Та же ошибка в других парсерах

Разные парсеры, один и тот же дефект. Сообщения не переведены — вы искали именно их текст.

  • Xerces (Java)

    Content is not allowed in prolog.
  • expat (Python)

    syntax error: line 1, column 0
  • .NET System.Xml

    Data at the root level is invalid. Line 1, position 1.
  • Go encoding/xml

    expected element type <urlset> but have <html>

До и после

Оба фрагмента проверяются тестами на настоящем парсере: первый выдаёт в точности сообщение выше, второй разбирается без ошибок.

Ошибка
{"error":"not_found","status":404}
Разбирается
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://example.com/</loc></url>
</urlset>