Имя: Пароль:
1C
1C 7.7
v7: Меркурий, Ветис.API и проверка по схеме
0 AlexSTAL
 
14.06.18
18:58
кто подскажет, можно ли проверить сформированный XML-запрос к сервису Ветис.API WSDL по средством XSD-схем?
Покрутил как мог:
    XML_DOM = CreateObject("Msxml2.DOMDocument.6.0");
    Header = XML_DOM.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""" );
    XML_DOM.appendChild(Header);
    ...
    
    Schema = СоздатьОбъект("msxml2.xmlschemacache.6.0");
    Schema.add("http://api.vetrf.ru/schema/cdm/registry/ws-definitions/v2";, КаталогИБ() + "registry_ws_definitions_v2.1.xsd");
    Schema.add("http://api.vetrf.ru/schema/cdm/dictionary/v2";, КаталогИБ() + "dictionary_v2.1.xsd");
    Schema.add("http://api.vetrf.ru/schema/cdm/base";, КаталогИБ() + "base_v2.0.xsd");
    
    
    XML_DOM.schemas = Schema;
    ////собственно проверка на валидность
    Ошибка = XML_DOM.validate();
    Если Ошибка.errorCode = 0 Тогда
        Предупреждение("Документ соответствует схеме");
    Иначе
        //// в свойстве .reason содержится причина ошибки.
        Предупреждение("ОШИБКА: "+Ошибка.reason);
    КонецЕсли;    


ответ: Узел не является ни допустимым, ни недопостимым, поскольку не найдено объявление в DTD и схеме
1 php5
 
14.06.18
20:16
(0) Попробуй этим сервисом проверить -> https://www.freeformatter.com/xml-validator-xsd.html
2 AlexSTAL
 
14.06.18
20:30
(1) Все сервисы, которые я нашёл, рассчитаны только на 1 схему, а в XML их несколько
Да и сама проверки тестового запроса не нужна - он корректно обрабатывается сервисом и возвращается ответ
Мне нужен для проверки запросов перед отправкой
3 AlexSTAL
 
15.06.18
10:13
Так. Наметился прогресс...
Создал тестовый XML и тестовую схему XSD (с тегами импорта других XSD). Проверил в XML-редакторах валидность и работоспособность - всё ок.

Делаю всё то же в 1С - болт, ошибка: "Элемент "Envelope" используется, но не был объявлен в DTD и схеме"

Странно, попробовал в 1С просто загрузить XML из файла и проверить на валидность - работает!

Так... Генерю XML файл, сохраняю, сразу его читаю, проверяю - работает!

Посмотрел все свойства и методы - ничего не нашёл, связанно с кэшированием или прочим, пробовал вставлять паузу 10 секунд, пробовал атрибуты "async" и "validateOnParse" - без сохранения не проходит валидацию.
Пробовал и 4-ую и 6-ую версию

Подскажите, возможно ли без сохранения/чтения проверять на валидность?
4 Сияющий в темноте
 
15.06.18
10:15
Наверное,если сохранить в строку и прочитать из строки,то тоже должно работать.
Проверка работает на уже сформированном xml,а не на стадии формирования.
5 AlexSTAL
 
15.06.18
10:29
(4) Да, такая конструкция так же работает     XML_DOM.LoadXML(XML_DOM.xml);

Так формирование же завершено, может команда есть какая, "закончить документ"?