Как проверить XML документ по схеме (провести валидацию)
Сохранить в файлеОбсудить в форуме
Описание
С переводом обмена с НО и ЦБ на XML формат, стала актуальна процедура проверки сформированного файла на соответствие схеме данных (XSD)
Привожу пример проверки по схемам обмена с ФНС (открытие/закрытие счетов (депозитов), изм.реквизитов..
Особенность примера в том, что обрабатываются сразу ВСЕ обнаруженные ошибки, а не по одной..
Пример без кода формирования самого XML-файла,а только подготовка и проведение ВАЛИДАЦИИ
Привожу пример проверки по схемам обмена с ФНС (открытие/закрытие счетов (депозитов), изм.реквизитов..
Особенность примера в том, что обрабатываются сразу ВСЕ обнаруженные ошибки, а не по одной..
Пример без кода формирования самого XML-файла,а только подготовка и проведение ВАЛИДАЦИИ
Текст примера
Schema = TlgActiveX("Msxml2.XMLSchemaCache.6.0"); doc=TlgActiveX("MSXML2.DOMDocument.6.0"); doc.async = False; doc.validateOnParse = true; /***********************************************/ /* Пропускаю код формирования doc - XML-файла. */ /***********************************************/ xsd = TlgActiveX("MSXML2.DOMDocument.6.0"); xsd.async = False; /*****************************************/ /* Для загрузки ТОЛЬКО одной схемы */ /* Добавить свои условия - IF ELIF ELSE */ /*****************************************/ /**************************************/ /* сообщение Банка по счету(депозиту) */ /**************************************/ /* Открытие/закрытие счета, вклада(депозита) */ xsd.load("\\\\Server\\Share\\RSBANK\\UserDir\\Mac\\311-P\\Schem\\SBC0_510.xsd"); /* Изменение реквизитов счета, вклада(депозита) */ //xsd.load("\\\\Server\\Share\\RSBANK\\UserDir\\Mac\\311-P\\Schem\\SBC1_510.xsd"); /* Изменение реквизитов счета, вклада(депозита), в связи с реорг.банка */ //xsd.load("\\\\Server\\Share\\RSBANK\\UserDir\\Mac\\311-P\\Schem\\SBC3_510.xsd"); /***************************/ /* Сообщение Банка по КЭСП */ /***************************/ /* Разрешение/прекращение права на исп. КЭСП для переводов ЭДС. п.10 */ //xsd.load("\\\\Server\\Share\\RSBANK\\UserDir\\Mac\\311-P\\Schem\\SKD0_510.xsd"); /* Изменение реквизитов КЭСП. п.11 */ //xsd.load("\\\\Server\\Share\\RSBANK\\UserDir\\Mac\\311-P\\Schem\\SKD1_510.xsd"); /* Изменение реквизитов счета, вклада(депозита), КЭСП в связи с реорг.банка. п.9 */ //xsd.load("\\\\Server\\Share\\RSBANK\\UserDir\\Mac\\311-P\\Schem\\SBC3_510.xsd"); Schema.add("",xsd); /* Добавляем к XMLфайлу схему */ doc.Schemas = Schema; /* Важная инструкция!!!! */ doc.setProperty("MultipleErrorMessages",True); /**************************************************/ /* doc - сформированный XML-файл, на этом этапе */ /* можно пока без сохранения на диск, т.е. файл */ /* находится в памяти. Проверяем ,если без ошибок */ /* то сохраняем на диск. */ /**************************************************/ err = doc.validate(); /* Есть ошибки заполнения */ /* Печатаем протокол с содержимым */ if(err.errorCode!=0) /* Перенаправляем вывод в файл */ setOutput(fname); allErr = err.allErrors; allErr.reset(); i=0; [****************************************************]; [ #](String(Date:f)+" "+string(Time:f)); [ Протокол контроля правильности заполнения XML файла]; [****************************************************]; While(allErr.next) reason = allErr.item(i).reason; reason = strSubst(reason,"\n",""); reason = strSubst(reason,"\r",""); println(reason); i=i+1; end; setOutput(null); if(open(out,fname)) ViewFile(Out); Close(Out); end; else /* Ошибок НЕТ, можно сохранять */ fNameXML = PrefixR+PrefixX+PrefixA+idBank+"_"+idNO+DateFile+"_"+NumberBank+NumberFilial+GG+NumberMessage+"_"+Sharp+MM+".xml"; doc.save(PathToSave +"\\"+ fNameXML); end;