Дано: Большой 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_.Закрыть();
    
КонецПроцедуры
Комментариев нет:
Отправить комментарий