Имя: Пароль:
1C
1С v8
Как получить результат проверки xml на соответствие схеме xsd?
,
0 RomaH
 
naïve
21.01.14
08:33
Есть такой вот скрипт:

Dim addtypes, format

'Set addtypes = CreateObject("msxml2.DOMDocument.6.0")
'addtypes.load("addtypes.xsd")
'addtypes.load("mlbtypes.xsd")


Set format = CreateObject("msxml2.DOMDocument.6.0")
format.load("%ИмяФайлаСхемы%")


Dim schema
Set schema = CreateObject("msxml2.XMLSchemaCache.6.0")

'call schema.add("", addtypes)
call schema.add("", format)


'теперь будем загружать проверяемый xml
Dim testing
Set testing = CreateObject("msxml2.DOMDocument.6.0")
testing.load("%ИмяФайлаСообщения%")

testing.schemas = schema
Set error = testing.validate
if error.errorCode <> 0 then
    serr = "Ошибка валидации XML пакета!"
        serr = serr + " Причина: " + error.reason
        serr = serr + " XPath: " + error.errorXPath
    msgbox(serr)
else
    msgbox("Документ соответствует схеме.")
end if

он выдает на экран результат проверки
хотелось бы получить результат внутри кода 1С
вопрос - как?
1 Defender aka LINN
 
21.01.14
08:36
(0) Проверяй средствами 1С. ВНЕЗАПНО, да?
2 RomaH
 
naïve
21.01.14
08:42
(1) [jnm jlyj rk.xtdjt lkz gjbcrf d CG
3 RomaH
 
naïve
21.01.14
08:42
(1) хоть одно ключевое для поиска в СП
4 Defender aka LINN
 
21.01.14
09:18
Попытка
        Схема = Новый COMОбъект("MSXML2.XMLSchemaCache.6.0");
        
    Исключение
        СообщитьОбОшибке("Не удалось создать объект XMLSchemaCache");
        Возврат Ложь;
    КонецПопытки;
    
    Попытка
        Схема.add("",ИмяФайлаСхемы);
    Исключение
        СообщитьОбОшибке("Не удалось подключить схему");
        Возврат Ложь;
    КонецПопытки;
    
    Попытка
        ДОМ = Новый COMОбъект("MSXML2.DOMDocument.6.0");
    Исключение
        СообщитьОбОшибке("Не удалось создать объект DOMDocument");
        Возврат Ложь;
    КонецПопытки;
    
    ДОМ.schemas                = Схема;
    ДОМ.async                = Ложь;
    ДОМ.validateOnParse        = Истина;
    ДОМ.resolveExternals    = Истина;
    ДОМ.load(ПутьКФайлу);
    
    Если (ДОМ.parseError.errorCode<>0) Тогда
        // ошибки при проверке правильности
        Ошибка = ДОМ.ParseError;
        
        ТекстОшибки = "
        |    Смещение = "+Ошибка.filepos+", строка = "+Ошибка.line+", позиция = "+Ошибка.linepos + "
        |    Описание ошибки: "+ СтрЗаменить(Ошибка.reason, Символы.ПС, " ") + "
        |    Путь в файле: "+Ошибка.ErrorXPath;
        
        СообщитьОбОшибке("При проверке правильности файла """+ПутьКФайлу+""" выявлены ошибки:" + ТекстОшибки);
        
        Возврат Ложь;
    КонецЕсли;
    
    Если НЕ ДОМ.validateOnParse Тогда    
        Ошибка=ДОМ.validate();    
        Если (Ошибка.errorCode<>0) Тогда
            
            ТекстОшибки = "
            |    Смещение = "+Ошибка.filepos+", строка = "+Ошибка.line+", позиция = "+Ошибка.linepos + "
            |    Описание ошибки: " + СтрЗаменить(Ошибка.reason, Символы.ПС, " ") + "
            |    Путь в файле: "+Ошибка.ErrorXPath;
            
            СообщитьОбОшибке("При валидации файла """+ПутьКФайлу+""" выявлены ошибки:" + ТекстОшибки);
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;
5 Asmody
 
21.01.14
09:42
см. ЧтениеXML.ОткрытьФайл(), 2 и 3 параметры
6 alexei366
 
21.01.14
09:50
(5) 1С не очень интересно ошибки показывает, а если их ещё и несколько то показывает только первую, если парень хочет подробные описания ошибок с сылкой на строку ошибки то может использование комов в этом плане удобней будет
7 RomaH
 
naïve
21.01.14
11:19
(4) достаточно было про ком объект упомянуть - я думал именно средствами 1С
8 Serginio1
 
21.01.14
11:48
9 Serginio1
 
21.01.14
11:52
8+ Прошу прощения. Это проверка набора схем
10 RomaH
 
naïve
21.01.14
11:54
(8) а где там xsd указывается?
11 Serginio1
 
21.01.14
12:33
(10) Ты набор схем можешь получить из Фабрики XDTO или из набора файлов или ПостроительСхемXML

СхемаXML = Новый СхемаXML;
СхемаXML.РасположениеСхемы = ИмяСхемыXSD;
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой