Решение задач 1С:Предприятие 8 на примерах

«Ошибка разбора XML» в 1С: причины и как исправить

Ошибки 1СИнтеграция и обменОпубликовано

Текст, который платформа читает как XML, не является корректным XML-документом. В продолжении сообщения обычно указаны номер строки и позиции, а также описание: ожидался начальный тег, неверный символ, незакрытый элемент.

Текст ошибки

Ошибка разбора XML

Причины

Шаг 1. Посмотрите, что на самом деле пришло

Большинство ошибок разбора XML при интеграциях происходит потому, что сервер вернул не XML. Сохраните полученный текст в файл и откройте его в редакторе:

Ответ = Соединение.Получить(Запрос);
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
Если Ответ.КодСостояния <> 200 Тогда
    ВызватьИсключение СтрШаблон("Сервер вернул код %1: %2",
        Ответ.КодСостояния, Лев(ТекстОтвета, 500));
КонецЕсли;

Если код ответа не 200 или в тексте HTML-страница, проблема не в разборе, а в запросе: адрес, авторизация, параметры.

Шаг 2. Проверьте позицию ошибки

Номер строки и колонки в сообщении указывает, где разбор остановился. Позиция 1,1 означает, что документ не начинается с XML: пустой текст, BOM в неожиданном месте, HTML или JSON.

Шаг 3. Кодировка

Объявление encoding в заголовке XML должно соответствовать фактической кодировке файла. Если файл в windows-1251, а в заголовке указано UTF-8, разбор упадёт на первой русской букве. При чтении из файла кодировку можно указать явно:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла, , , "windows-1251");

Шаг 4. Не собирайте XML строками

Ручная склейка строк — частая причина: значение с символом & или < ломает документ. Используйте ЗаписьXML, который сам экранирует спецсимволы:

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");
ЗаписьXML.ЗаписатьАтрибут("Наименование", "Болт М8 & гайка");
ЗаписьXML.ЗаписатьКонецЭлемента();
Текст = ЗаписьXML.Закрыть();

Шаг 5. Управляющие символы в данных

Некоторые символы недопустимы в XML даже в экранированном виде, например символы с кодами 0–8. Они попадают в базу при копировании текста из других программ. Найдите такие значения в реквизитах объекта из сообщения и очистите их.

Для пользователя

Если ошибка при загрузке файла обмена или выписки, файл может быть повреждён или выгружен не полностью. Выгрузите его заново и проверьте размер. Если ошибка при работе с внешним сервисом, повторите позже: сервис мог временно вернуть страницу с ошибкой.

Частые вопросы

Что значит ошибка в позиции 1,1?

Документ не начинается с корректного XML. Обычно пришёл пустой ответ, HTML-страница ошибки или JSON. Посмотрите текст, который был передан на разбор.

Как экранировать амперсанд в XML?

Используйте ЗаписьXML: при записи значений и атрибутов он сам заменит & и < на сущности, поэтому вручную экранировать ничего не нужно.

XML в 1С программно: запись, чтение, DOM и выгрузка данных

Интеграция и веб-сервисы

Готовые примеры работы с XML на встроенном языке 1С: запись и чтение, DOM с XPath, преобразование XML в структуру, выгрузка справочника и разбор ошибок парсинга.

HTTP-запросы из 1С к REST API: GET, POST и JSON

Интеграция и веб-сервисы

Готовые примеры GET и POST запросов из 1С к REST API по HTTPS: заголовки, токены, JSON, прокси, отправка файлов и универсальная функция-обёртка с логированием.

Обмены в 1С: план обмена, регистрация и выгрузка изменений

Интеграция и веб-сервисы

Разбираем, какие бывают обмены в 1С и как построить свой обмен на плане обмена: регистрация изменений, выгрузка, загрузка и подтверждение получения сообщений.

Похожие ошибки