Дано: Большой XML-файл, при попытке загрузить через SSIS в базу SQL падает с неинформативной ошибкой. Доступа к ETL-проекту нет. Надо найти ошибку.
Решение:
// 7.7
Процедура Сформировать()
Анализатор = СоздатьОбъект("AddIn.XMLParser");
ДокДляПроверки = Анализатор.СоздатьДокумент();
Схемы = Анализатор.СоздатьКоллекциюСхем();
Схемы.ДобавитьСхему("", "полный путь и имя файла.xsd");
ДокДляПроверки.Схемы = Схемы;
Попытка
ДокДляПроверки.Загрузить("полный путь и имя файла.xml" );
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
//8.x - https://forum.infostart.ru/forum9/topic71808/
Процедура ВалидацияXML(ПутьКФайлуXML, ПутьКФайлуСхемы)
// Читаем схему и записываем её в объектную модель документа (DOM).
ЧтениеXML_ = Новый ЧтениеXML;
ЧтениеXML_.ОткрытьФайл(ПутьКФайлуСхемы);
ПостроительDOM_ = Новый ПостроительDOM;
ДокументDOM_ = ПостроительDOM_.Прочитать(ЧтениеXML_);
ЧтениеXML_.Закрыть();
// Для построения схемы получаем корневой элемент документа.
КорневойЭлементДокумента_ = ДокументDOM_.documentElement;
// Для создания схемы используем построитель схем.
ПостроительСхем_ = Новый ПостроительСхемXML;
// Cоздаем схему.
СхемаXML_ = ПостроительСхем_.СоздатьСхемуXML(КорневойЭлементДокумента_);
// Теперь нужно обновить DOM схемы, иначе действия с тегами <xs:import> и <xs:include>
// не будут учтены.
// Для этого просто удалим документ DOM.
СхемаXML_.ДокументDOM = Неопределено;
// Добавляем схему в набор.
НаборСхем_ = Новый НаборСхемXML;
НаборСхем_.Добавить(СхемаXML_);
// Проверим, что набор схем корректен.
НаборСхем_.Проверить();
// Теперь прочитаем XML, с учетом набора схем.
ЧтениеXML_ = Новый ЧтениеXML;
ПараметрыЧтенияXML_ = Новый ПараметрыЧтенияXML(,,,ТипПроверкиXML.СхемаXML);
ЧтениеXML_.ОткрытьФайл(ПутьКФайлуXML, ПараметрыЧтенияXML_, НаборСхем_);
// При вызове метода Прочитать() выполняется валидация файла XML по схеме.
ЧтениеXML_.Прочитать();
ЧтениеXML_.Закрыть();
КонецПроцедуры
Комментариев нет:
Отправить комментарий