Валидация (проверка) xml-файла по схеме (xsd) в 1С 8

База знаний
  1. 10 г. назад

    Используется парсер msxml 6, соответственно, целевая платформа - Windows

    &НаКлиентеНаСервереБезКонтекста
    Функция ФорматироватьТекстСообщения(ТекстСообщения)
    	
    	Возврат ""+ТекущаяДата()+": "+ТекстСообщения+Символы.ПС;
    	
    КонецФункции
    
    // Куда = 0 - в сообщения пользователю
    // Куда = 1 - в протокол
    // Куда = 2 - в протокол и в сообщения пользователю
    &НаКлиенте
    Процедура ВывестиСообщение(Сообщ,Куда=1,Форматировать=Ложь)
    	
    	Если Форматировать Тогда
    		ТекСообщ=ФорматироватьТекстСообщения(Сообщ);
    	Иначе
    		ТекСообщ=Сообщ+Символы.ПС;
    	КонецЕсли;
    	
    	Если (Куда=0) ИЛИ (Куда=2) Тогда
    		Сообщить(ТекСообщ,СтатусСообщения.ОченьВажное);
    	КонецЕсли;
    	Если (Куда=1) ИЛИ (Куда=2) Тогда
    		Протокол=Протокол+ТекСообщ;
    	КонецЕсли;
    	
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ВывестиОшибкуРазбораХМЛ(Ошибка,Куда,Форматировать)
    	ВывестиСообщение(" ",Куда,Форматировать);
    	ВывестиСообщение("Обнаружена ошибка:",Куда,Форматировать);
    	ВывестиСообщение("Смещение = "+Формат(Ошибка.filepos,"ЧГ=0")+", строка = "+Формат(Ошибка.line,"ЧГ=0")+", позиция = "+Формат(Ошибка.linepos,"ЧГ=0")+", код ошибки: "+Формат(Ошибка.errorCode,"ЧГ=0"),Куда,Форматировать);
    	ВывестиСообщение("Описание ошибки: "+Ошибка.reason,Куда,Форматировать);
    КонецПроцедуры
    
    &НаКлиенте
    Функция ПроверкаПоСхемеКлиент(ИмяФайла,ИмяФайлаСхемы,ВыводитьВсеОшибки=Истина)
    	
    	Куда=1;	Форматировать=Ложь;
    	
    	РезПроверки=Ложь;
    	
    	Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
    		Возврат РезПроверки;
    	КонецЕсли;
    	
    	Если НЕ ЗначениеЗаполнено(ИмяФайлаСхемы) Тогда
    		// Не удалось извлечь файл схемы
    		Возврат РезПроверки;
    	КонецЕсли;
    	
    	Попытка
    		Схема=Новый COMОбъект("MSXML2.XMLSchemaCache.6.0");
    	Исключение
    		ВывестиСообщение("Не удалось создать объект XMLSchemaCache (возможно, не установлен MSXML 6)",2);
    		Возврат РезПроверки;
    	КонецПопытки;
    	
    	Попытка
    		Схема.add("",ИмяФайлаСхемы);
    	Исключение
    		ВывестиСообщение("Не удалось подключить схему: "+ИмяФайлаСхемы,2);
    		Схема=Неопределено;
    		Возврат РезПроверки;
    	КонецПопытки;
    	
    	Попытка
    		ДОМ=Новый COMОбъект("MSXML2.DOMDocument.6.0");
    	Исключение
    		ВывестиСообщение("Не удалось создать объект DOMDocument (возможно, не установлен MSXML 6)",2);
    		Схема=Неопределено;
    		Возврат РезПроверки;
    	КонецПопытки;
    	
    	ДОМ.schemas=Схема;
    	ДОМ.async=Ложь;
    	ДОМ.validateOnParse=Истина;
    	ДОМ.resolveExternals=Истина;
    	Если ВыводитьВсеОшибки Тогда
    		ДОМ.SetProperty("MultipleErrorMessages",Истина);
    	КонецЕсли;
    	ДОМ.load(ИмяФайла);
    	
    	Если (ДОМ.parseError.errorCode<>0) Тогда
    		// ошибки при проверке правильности
    		ВывестиСообщение("При проверке по схеме выявлены ошибки!",Куда,Форматировать);
    		Если ВыводитьВсеОшибки Тогда
    			Для каждого parseError из ДОМ.parseError.AllErrors  Цикл
    				ВывестиОшибкуРазбораХМЛ(parseError,Куда,Форматировать);
    			КонецЦикла;
    		Иначе
    			ВывестиОшибкуРазбораХМЛ(ДОМ.parseError,Куда,Форматировать);
    		КонецЕсли;
    	Иначе
    		ВывестиСообщение("Файл успешно прошёл проверку по схеме!",Куда,Форматировать);
    		РезПроверки=Истина;
    	КонецЕсли;
    	
    	Схема=Неопределено;
    	ДОМ=Неопределено;
    	
    	Возврат РезПроверки;
    	
    КонецФункции
    
    
  2. 05.02.2014 22:10:30 отредактировано andrewks

    Обработка проверки по схеме XML-файла (валидация по XSD)

    Довольно часто возникает необходимость проверки соответствия XML-файлов представленной схеме (XSD), но под рукой не оказывается программы, обладающей этим функционалом. Представляемая Вашему вниманию обработка очень компактна, не требует установки, и позволяет справиться с этой задачей в среде 1С:Предприятие 8.2 и выше под Windows.

    Системные требования: необходимо наличие служб MSXML 6.0. Во всех современных версиях Windows (начиная с Vista и позже) они присутствуют после установки. Если же версии Windows старые (XP/2003), тогда может понадобиться их установка (взять можно здесь ), но, скорее всего, даже на этих версиях Windows они уже установлены, если система периодически обновляется. Так что рекомендую сначала попробовать обработку, и только в случае неудачи устанавливать службы MSXML 6.0.

    ВалидацияXML.zip

или зарегистрируйтесь чтобы ответить!