Проверка XML по схеме XSD

1. dour-dead 271 29.05.12 18:03 Сейчас в теме
Добрый вечер всю голову уже сломал, как сделать, что бы при проверке xml по XSD, выводились все ошибки, а не одну.
Код приведенный нише выводит только одну ошибку.


Функция ПроверкаПоСхемеXSD()
	
	ИмяСхемыXSD = ПолучитьФайлСхемыXSD();
	ИтогПроверки = Ложь;
	
	Если ИмяСхемыXSD = Неопределено Тогда
		Возврат ИтогПроверки;
	КонецЕсли;
	
	Попытка
		ДокЭкспорт = Новый COMОбъект("Msxml2.DOMDocument.5.0");
	Исключение
		Попытка
			ДокЭкспорт = Новый COMОбъект("Msxml2.DOMDocument.3.0");
		Исключение
			Возврат ИтогПроверки;
		КонецПопытки;
	КонецПопытки;
	
	Попытка
		Попытка
			КэшСхем = Новый COMОбъект("Msxml2.XMLSchemaCache.5.0");
			КэшСхем.add("", ИмяСхемыXSD);
			ДокЭкспорт.Schemas = КэшСхем;
		Исключение
			Сообщить("Не удалось подключить схему проверки, причина: "+Символы.ПС+""""+ОписаниеОшибки()+"""",СтатусСообщения.Важное);
			Возврат ИтогПроверки;
		КонецПопытки;
		
		ДокЭкспорт.ValidateOnParse = Истина;
		ДокЭкспорт.Async = Ложь;
		ДокЭкспорт.Load(ВыборФайла);
		
		Error = ДокЭкспорт.ParseError;
		Если Error.ErrorCode = 0 Тогда
			ИтогПроверки = Истина;
		Иначе
		// есть ошибка
		СтрокаОшибки = Error.Reason+Символы.ПС+Error.SrcText;
		Сообщить(НСтр("ru = 'Найдена ошибка при проверке файла "+ВыборФайла+" по xsd схеме:"+Символы.ПС+""" "+СтрокаОшибки+""".'"),СтатусСообщения.Важное);
		КонецЕсли;
		
	Исключение
		Возврат ИтогПроверки;
	КонецПопытки;

	Возврат ИтогПроверки;
	
КонецФункции
Показать
По теме из базы знаний
Найденные решения
9. lootinn 31.05.12 04:33 Сейчас в теме
(1),
	XMLDoc = New COMObject("Msxml2.DOMDocument.6.0");
	XMLDoc.Async = false;
	XMLDoc.ValidateOnParse = true;
	SchemaCache = New COMObject("Msxml2.XMLSchemaCache.6.0");
	SchemaCache.Add("",SchemaFile);
	XMLDoc.Schemas = SchemaCache;
	XMLDoc.SetProperty("MultipleErrorMessages", true);
	XMLDoc.Load(XMLFile);
	ErrObj = XMLDoc.ParseError;
	If ErrObj.ErrorCode <> 0 Then
		For Each ErrItem In ErrObj.AllErrors Do 
			Message("Error: " + ErrItem.Reason + " " + ErrItem.SrcText);
		EndDo;
	EndIf;
Показать


msdn говорит, что эта возможность появилась с MSXML 5.0.

А к вопросу, как это сделать средствами 1с присоединяюсь.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. ponaroshku 30.05.12 17:49 Сейчас в теме
(1) А просто в цикл загнать не получится?


Error = ДокЭкспорт.ParseError;
Для каждого стр из Error Цикл

Если Error.ErrorCode = 0 Тогда
ИтогПроверки = Истина;
Иначе
// есть ошибка
СтрокаОшибки = Error.Reason+Символы.ПС+Error.SrcText;
Сообщить(НСтр("ru = 'Найдена ошибка при проверке файла "+ВыборФайла+" по xsd схеме:"+Символы.ПС+""" "+СтрокаОшибки+""".'"),СтатусСообщения.Важное);
КонецЕсли;

КонецЦикла;
7. dour-dead 271 30.05.12 18:08 Сейчас в теме
(6) ponaroshku, Error - это
 Свойство - Error	        
 Значение - COMОбъект		
 Тип      - COMОбъект
9. lootinn 31.05.12 04:33 Сейчас в теме
(1),
	XMLDoc = New COMObject("Msxml2.DOMDocument.6.0");
	XMLDoc.Async = false;
	XMLDoc.ValidateOnParse = true;
	SchemaCache = New COMObject("Msxml2.XMLSchemaCache.6.0");
	SchemaCache.Add("",SchemaFile);
	XMLDoc.Schemas = SchemaCache;
	XMLDoc.SetProperty("MultipleErrorMessages", true);
	XMLDoc.Load(XMLFile);
	ErrObj = XMLDoc.ParseError;
	If ErrObj.ErrorCode <> 0 Then
		For Each ErrItem In ErrObj.AllErrors Do 
			Message("Error: " + ErrItem.Reason + " " + ErrItem.SrcText);
		EndDo;
	EndIf;
Показать


msdn говорит, что эта возможность появилась с MSXML 5.0.

А к вопросу, как это сделать средствами 1с присоединяюсь.
10. dour-dead 271 31.05.12 09:06 Сейчас в теме
2. dour-dead 271 30.05.12 15:55 Сейчас в теме
штатного механизма в 1С -ке как я понимаю нет?
3. aristar 41 30.05.12 17:12 Сейчас в теме
Проблема в том, что такой алгоритм работы диктует стандарт XML. Обработка должна быть немедленно прервана, при нахождении первой ошибки.
Есть инициатива MicroXML, где предполагается возможность продолжения обработки документа даже после ошибки.
4. dour-dead 271 30.05.12 17:38 Сейчас в теме
5. aristar 41 30.05.12 17:45 Сейчас в теме
(4) Возможно, детали сходу не видны. Я имел ввиду вот это
8. dour-dead 271 30.05.12 18:11 Сейчас в теме
В данный момент стоит задача использовать методы и язык 1с-ки, соответственно вопрос кто нибудь с этим сталкивался?.
Но всё равно интересно как получить все ошибки если делать через Msxml2.DOMDocument
11. dour-dead 271 31.05.12 09:27 Сейчас в теме
Остается понять как сделать средствами 1С
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот