Добрый день.
Есть файл XML со структурой,соответствующей фабрике XDTO.
В конфигурации получателя разместил эту схему и пытаюсь разобрать файл загрузки при помощи сериализатора, связанного с этой фабрикой.
При этом не сериализатор по какой то причине не производит чтение файла загрузки. Метод ВозможностьЧтенияXML(ЧтениеХМЛ) возвращает ЛОЖЬ.
///////////////////////////////////////////////////////////////
// СОЗДАНИЕ ФАБРИКИ НА ОСНОВЕ СХЕМЫ "http://localhost/MyExportData"
//
НаборСхемФабрик = ФабрикаXDTO.ЭкспортСхемыXML("http://localhost/MyExportData");
Схема = НаборСхемФабрик.Получить(0);
Схема.ОбновитьЭлементDOM();
ПутьКФабрике = ПолучитьИмяВременногоФайла("xsd");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПутьКФабрике);
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(Схема.ДокументDOM, ЗаписьXML);
ЗаписьXML.Закрыть();
ФабрикаПолучателя = СоздатьФабрикуXDTO(ПутьКФабрике);
ТекСериализатор = Новый СериализаторXDTO(ФабрикаПолучателя);
ЧтениеХМЛ = Новый ЧтениеXML;
ЧтениеХМЛ.ОткрытьФайл(ИмяФайлаЗагрузки);
ЧтениеХМЛ.Прочитать(); // Чтение коревого узла
Пока ТекСериализатор.ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл
Тип_РасходТовара = ФабрикаXDTO.Тип("http://localhost/MyExportData", "РасходТовара");
ТекОбъект = ТекСериализатор.ПрочитатьXML(ЧтениеХМЛ, Тип_РасходТовара);
КонецЦикла;
Показать
При помощи другой методики этот файл нормально читается в получателе
НаборСхемФабрик = ФабрикаXDTO.ЭкспортСхемыXML("http://localhost/MyExportData");
Схема = НаборСхемФабрик.Получить(0);
Схема.ОбновитьЭлементDOM();
ПутьКФабрике = ПолучитьИмяВременногоФайла("xsd");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПутьКФабрике);
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(Схема.ДокументDOM, ЗаписьXML);
ЗаписьXML.Закрыть();
ФабрикаПолучателя = СоздатьФабрикуXDTO(ПутьКФабрике);
Тип_РасходТовара = ФабрикаXDTO.Тип("http://localhost/MyExportData", "РасходТовара");
ДанныеXDTO = ФабрикаПолучателя.ПрочитатьXML(ЧтениеХМЛ, Тип_РасходТовара); // В этой переменой нормально формируется список содержимого файла
Показать
Возможно ли вообще использовать объект Сериализатор с выбранной фабрикой XDTO для чтения файла XML?
(1)У вас файл начинается с узла ExportData. Такого узла нет в пакете XDTO. Поэтому не читает.
Надо либо создать такой объект в пакете, либо чтением xml дочитать до узла РасходТовара, потом читать этот объект.
Пример чтения объекта XDTO фабрикой.
(13) Догадываюсь, что огород с отдельной фабрикой задумывается для конфигурации, где не будет соответствующего пакета XDTO. Т.е. вместе с данными будет отправляться и их структура, о которой приемнику ничего не известно.
Ну и я попробую у Вас спросить, для собственного образования. Какое значение ожидается в переменной "ТекОбъект"? Какого типа?
(14)Честно говоря я и сам пока плохо понимаю зачем топикстартеру тут сериализатор, потому как он по идее должен преобразовать это все в объект конфигурации или встроенного языка. Но я сомневаюсь что есть какое-то соответствие, и именно поэтому ему сериализатор возвращает ложь. И как не извращайся можно получить только ОбъектXDTO. А дальше "врукопашную".
Проверял такую возможность. Вероятней всего нужно в самой схеме XDTO какие-то опции правильно выставить или в XML-файле атрибуты. Подробного описания не могу найти.
(7) Как-то я ввязался в тему, в которой мало что понимаю. Заранее извините.
В синтакс-помощнике к методу "ПрочитатьXML" сериализатора я прочитал следующее:
Прочитаны могут значения тех типов, которые могут быть записаны методом ЗаписатьXML.
В описании метода "ЗаписатьXML":
Тип параметра определяется совокупностью типов, для которых определена XML-сериализация.
Я эти строчки понимаю так: записываются и читаются лишь те объекты встроенного языка, для которых в синтакс-помощнике есть указание "Сериализуется".
Скажите, пожалуйста, а чем Вам не понравилось читать файл с использованием фабрики? И что Вы ожидаете получить в результате чтения сериализатором (какое значение, какого типа)?
(10) Как понимаю, сериализатор читает в объект заданного типа. Если переданный xml содержит что-то лишнее, он не прочитает. Поэтому подозреваю он не прочитает как фабрика в список объектов.