Имя: Пароль:
1C
1C 7.7
v7: Проверка xml по xsd
0 ZloyGenie
 
04.12.12
20:36
Здравствуйте уважаемые!
Сделал в 1с выгрузку в документ xml (декларация по алкоголю). Есть xsd файл для проверки. Подскажите как в 1с теперь проверить эту выгрузку с помощью xsd файла? И вообще возможно ли это?
Щас та проверка, которую я намудрил просто проходит не выдавая ничего, хотя специально делал ошибку в названии раздела:

   Анализатор = СоздатьОбъект("AddIn.XMLParser");
   Корень = Анализатор.СоздатьДокумент();
   раздел = Корень.СоздатьПодчиненныйЭлемент("Раздел");
   схема = Анализатор.СоздатьКоллекциюСхем();
   схема.ДобавитьСхему("Схема", "c:\temp\my5.xsd");
   Корень.Схемы = схема;
   Корень.Проверить();

Все делал через v7plus. Версия анализатора 2.0 пишет.
1 Dolly_EV
 
05.12.12
04:21
http://infostart.ru/public/156973/

если нужна только проверка - то смотри функцию в модуле
ВалидацияХМЛпоСхеме

вот мой немного поправленный вариант (когда много однотипных ошибок - задумывается надолго на проверке, поэтому параметром КолвоВыводимыхОшибок ограничил количество показываемых ошибок):

//======================================================================
Функция ВалидацияХМЛпоСхеме(ИмяФайла,ИмяСхемы,КолвоВыводимыхОшибок=1)
   Попытка
       Схема=СоздатьОбъект("MSXML2.XMLSchemaCache.6.0");
   Исключение
       Сообщить("Не удалось создать объект XMLSchemaCache","!");
       Возврат 0;
   КонецПопытки;
   
   Попытка
       Схема.add("",ИмяСхемы);
   Исключение
       Сообщить("Не удалось подключить схему: "+ИмяСхемы,"!");
       Возврат 0;
   КонецПопытки;
   
   Попытка
       ДОМ=СоздатьОбъект("MSXML2.DOMDocument.6.0");
   Исключение
       Сообщить("Не удалось создать объект DOMDocument","!");
       Возврат 0;
   КонецПопытки;
   
   ДОМ.schemas=Схема;
   ДОМ.async=0;
   ДОМ.validateOnParse=-1;
   ДОМ.resolveExternals=-1;
   Если (КолвоВыводимыхОшибок>1) Тогда
       ДОМ.SetProperty("MultipleErrorMessages",-1);
   КонецЕсли;
   ДОМ.load(ИмяФайла);
   
   Если (ДОМ.parseError.errorCode<>0) Тогда
       // ошибки при проверке правильности
       ВывестиСообщение("При проверке по схеме файла "+ИмяФайла+" выявлены ошибки!",1);
       Если (КолвоВыводимыхОшибок>1) Тогда
           Для НомОш=0 По ДОМ.parseError.allErrors.length-1 Цикл
               parseError=ДОМ.parseError.allErrors.item(НомОш);
               ВывестиОшибкуРазбораХМЛ(parseError);
               Если НомОш>=КолвоВыводимыхОшибок Тогда
                   ВывестиСообщение("...и еще "+(ДОМ.parseError.allErrors.length-1-НомОш)+" ошибок",1);
                   Прервать;
               КонецЕсли;
           КонецЦикла;
       Иначе
           ВывестиОшибкуРазбораХМЛ(ДОМ.parseError);
       КонецЕсли;
       Возврат 0;
   КонецЕсли;
   ДОМ="";
   Возврат 1;
КонецФункции
2 ZloyGenie
 
05.12.12
18:45
Спасибо, дружище!