Добрый вечер всю голову уже сломал, как сделать, что бы при проверке 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 схеме:"+Символы.ПС+""" "+СтрокаОшибки+""".'"),СтатусСообщения.Важное);
КонецЕсли;
Исключение
Возврат ИтогПроверки;
КонецПопытки;
Возврат ИтогПроверки;
КонецФункции
ПоказатьПо теме из базы знаний
- Как создать в 7.7 XML, проверить по схемам (XSD, XML) от заказчика и отправить на вебсервер методом Post
- Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3
- Опыт внедрения ESB (интеграционной шины) в ПАО "Газпром нефть"
- Ошибка при взаимодействии УПП с ФСС - 2
- Проверка деклараций по схемам ЕГАИС алко
Найденные решения
(1),
msdn говорит, что эта возможность появилась с MSXML 5.0.
А к вопросу, как это сделать средствами 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с присоединяюсь.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) А просто в цикл загнать не получится?
Error = ДокЭкспорт.ParseError;
Для каждого стр из Error Цикл
Если Error.ErrorCode = 0 Тогда
ИтогПроверки = Истина;
Иначе
// есть ошибка
СтрокаОшибки = Error.Reason+Символы.ПС+Error.SrcText;
Сообщить(НСтр("ru = 'Найдена ошибка при проверке файла "+ВыборФайла+" по xsd схеме:"+Символы.ПС+""" "+СтрокаОшибки+""".'"),СтатусСообщения.Важное);
КонецЕсли;
КонецЦикла;
Error = ДокЭкспорт.ParseError;
Для каждого стр из Error Цикл
Если Error.ErrorCode = 0 Тогда
ИтогПроверки = Истина;
Иначе
// есть ошибка
СтрокаОшибки = Error.Reason+Символы.ПС+Error.SrcText;
Сообщить(НСтр("ru = 'Найдена ошибка при проверке файла "+ВыборФайла+" по xsd схеме:"+Символы.ПС+""" "+СтрокаОшибки+""".'"),СтатусСообщения.Важное);
КонецЕсли;
КонецЦикла;
(1),
msdn говорит, что эта возможность появилась с MSXML 5.0.
А к вопросу, как это сделать средствами 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с присоединяюсь.
Проблема в том, что такой алгоритм работы диктует стандарт XML. Обработка должна быть немедленно прервана, при нахождении первой ошибки.
Есть инициатива MicroXML, где предполагается возможность продолжения обработки документа даже после ошибки.
Есть инициатива MicroXML, где предполагается возможность продолжения обработки документа даже после ошибки.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот