При работе с файлами формата XML в среде 1С:Предприятие разработчики нередко сталкиваются с фатальной ошибкой разбора: Extra content at the end of the document. Эта ошибка указывает на то, что парсер XML обнаружил данные, которые не соответствуют установленным правилам стандарта. В данной статье мы разберем причины этой проблемы и научимся исправлять её программными методами.
Стандарт XML строго регламентирует структуру документа: он должен содержать ровно один корневой элемент, внутри которого располагаются все остальные вложенные теги. Если ваш файл содержит несколько последовательно идущих документов, каждый из которых является «корневым», парсер ЧтениеXML после обработки первого документа ожидает встретить конец файла. Когда вместо этого он видит начало следующего документа, он квалифицирует это как «лишний контент» и останавливает работу.
Прежде чем приступать к исправлению, давайте проанализируем, что именно приводит к остановке процесса:
Если вы не можете изменить систему-источник, которая формирует некорректный файл, вы можете программно «обернуть» содержимое файла в корневой тег. Это позволит парсеру 1С воспринять документ как единое целое.
Рассмотрим алгоритм действий:
<Root>).</Root>).Такой подход превращает последовательность документов в корректный XML-документ с одним корнем.
Если файл слишком велик или «обертка» не помогает из-за наличия специфических ошибок, используйте пошаговое считывание текста. Вместо автоматизированного разбора всего файла, вы можете искать маркеры начала и конца каждого документа самостоятельно.
Разберем пример логики для ручного вычленения блоков:
// Пример псевдокода для поиска блоков
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ИмяФайла);
Для НомерСтроки = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл
СтрокаСодержимого = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки);
// Ищем маркеры начала документа
Если Найти(СтрокаСодержимого, "<Document>") > 0 Тогда
// Начало блока — начинаем обработку
КонецЕсли;
КонецЦикла;
Если вы видите ошибки типа <div в логах разбора, это верный признак того, что в ваш XML попал HTML-код. Проверьте, не является ли содержимое файла ответом веб-сервера, который вместо данных прислал страницу ошибки (например, 404 Not Found или 500 Internal Server Error).
Чтобы исключить такие ситуации, используйте внешние инструменты для проверки валидности XML, например, плагин XML Tools для Notepad++ или попробуйте открыть файл в браузере. Если браузер выдает ошибку, значит, проблема в самом файле, и его необходимо очистить от «мусора» перед загрузкой в 1С.
Для эффективного поиска места сбоя воспользуйтесь следующими советами:
Прочитать() объекта ЧтениеXML. Анализируйте содержимое текущего узла.СтрЗаменить(Строка, Символ(160), " ") решает проблему.Строка. Используйте потоковые объекты ЧтениеXML или ТекстовыйДокумент, чтобы избежать переполнения памяти.Помните, что основной ключ к успеху при работе с XML — это строгое соответствие стандартам. Если файл поврежден, самым надежным способом будет приведение его к валидному виду на промежуточном этапе обработки.