Ошибка синтаксического анализа XML в 1С — Поиск и исправление
- Исключение:
Ошибка синтаксического анализа XML (XML parser error: mismatched tag / unexpected end of file). - Сбой выгрузки/загрузки данных через планы обмена и правила конвертации (КД 2.0 / КД 3.0).
- Наличие в теле документа недопустимых непечатаемых управляющих символов ASCII (коды 0x00 - 0x1F).
- Нарушение структуры тегов и кодировки XML пролога (
<?xml version="1.0" encoding="UTF-8"?>).
1. Поиск точной строки и колонки ошибки в ЧтениеXML
Объект ЧтениеXML позволяет точно определить место повреждения документа:
Чтение = Новый ЧтениеXML;
Попытка
Чтение.ОткрытьФайл("C:\Exchange\data.xml");
Пока Чтение.Прочитать() Цикл
// Потоковая обработка узлов
КонецЦикла;
Исключение
НомерСтроки = Чтение.НомерСтроки;
НомерПозиции = Чтение.НомерПозиции;
ВызватьИсключение СтрШаблон("Сбой XML в строке %1, позиция %2: %3", НомерСтроки, НомерПозиции, ОписаниеОшибки());
Фиксировать
Чтение.Закрыть();
КонецПопытки;2. Очистка невалидных символов XML (XML 1.0 Invalid Characters)
Спецификация XML 1.0 запрещает большинство низкоуровневых управляющих символов. Выполните предварительную фильтрацию перед разбором:
Функция ОчиститьНедопустимыеСимволыXML(ИсходныйТекст)
// Удаление спецсимволов кроме табуляции, перевода строки и возврата каретки
Недопустимые = Новый Массив;
Для Сч = 0 По 31 Цикл
Если Сч <> 9 И Сч <> 10 И Сч <> 13 Тогда
ИсходныйТекст = СтрЗаменить(ИсходныйТекст, Символ(Сч), "");
КонецЕсли;
КонецЦикла;
Возврат ИсходныйТекст;
КонецФункции3. Экранирование зарезервированных сущностей
Убедитесь, что текстовые значения узлов экранируют базовые сущности: & (&), < (<), > (>), " ("), ' (').
Частые вопросы (FAQ)
Почему метод ЧтениеXML падает на больших файлах (>2 Гб)?
Если файл считывается целиком в память через строку, происходит переполнение стека. Используйте исключительно потоковое чтение через методы ЧтениеXML.ОткрытьФайл() и ЧтениеXML.Прочитать().
Как проверить валидность XML-документа по схеме XSD?
Используйте объект ФабрикаXDTO и метод ФабрикаXDTO.Создать(). Если документ нарушает ограничения схемы XSD, платформа вернет детальное описание несоответствия типов.
Что означает ошибка 'EntityRef: expecting ';''?
В тексте XML встретился символ амперсанда '&', который не является началом валидной сущности. Он должен быть заменен на '&'.
Можно ли разобрать частично поврежденный XML файл?
Стандартный DOM-парсер 1С завершит работу с ошибкой. Поврежденные фрагменты можно восстановить только регулярными выражениями или сторонними утилитами восстановления текста.