Как закинуть XML в XDTO? #742930


#0 by vicof
ТекстХМл - это ХМЛ в виде текстовой строки. При обращении к веб-сервису на сервер уходит пакет в виде: <soap:Envelope xmlns:soap=";                 <soap:Header/>                 <soap:Body> <request xmlns=";                                xmlns:xs=";                                xmlns:xsi="; Как сделать так, чтобы 1С-ка не экранировала символы угловых скобок при отправке?
#1 by DmitrO
надо сделать так, чтобы тип параметра был не string, а anyType
#2 by Fragster
но и тогда не уйдет
#3 by Fragster
что конкретно нужно?
#4 by Fragster
правильнее всего импортировать схему XSD в конфигурацию, создать объектXDTO нужного типа, заполнить его свойства и передавать его
#5 by vicof
Тип паараметра как раз anyType
#6 by Fragster
можно не импортировать, но тогда некрасиво с .Добавить надо извращаться
#7 by vicof
Нужно передать XML методу веб-сервиса, чтобы он его могу распарсить.
#8 by Fragster
есть один способ, добавить в XML пространство имен сервиса, прочитать его в объект XDTO, а его уже передать. но это - извращение.
#9 by vicof
*он его мог распарсить
#10 by Fragster
откуда этот XML взялся?
#11 by vicof
Прислали разработчики веб-сервиса
#12 by Fragster
теперь пусть XSD пришлют. или WSDL.
#13 by DmitrO
тогда попросту передавай объект XDTO а не строку
#14 by DmitrO
anyType, он на то и anyType, что может быть любым типом, как простым так и комплексным.
#15 by vicof
Не, вы не поняли. WSDL есть - описывает веб-сервис. Параметры, методы и т.п. Я вызываю метод этого веб-сервиса, и передаю туда параметр типа anyType, преобразовывая его к строке в виде ХМЛ.
#16 by vicof
Но все, что сожержится в Парам, экранируется, чтобы получился корректный ХМЛ
#17 by vicof
Парам = СериализаторXDTO.ЗаписатьXDTO(ЗаписьХМЛ); как раз и формирует объектХДТО
#18 by Fragster
вместо того, чтобы юзать ЗаписьXML, юзай Объект = ФабрикаXDTO.Создать(Фабрика.Тип(ПространстовИмен,ИмяТипа)); Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Прокси.Процесс(Объект)
#19 by Serginio1
#20 by Fragster
не совсем так.
#21 by DmitrO
начнем с того, что ЗаписатьXML по документации вроде как ничего не возвращает )
#22 by vicof
Щас попробую
#23 by vicof
Сорри, это я уже тут пробовал отлаживать, Там не ЗаписьXML, там текстовая строка
#24 by Serginio1
Тебе все нужно делать через методы Прокси.ФабрикаXDTO
#25 by Serginio1
Не проходит так строка
#26 by vicof
Объект = Прокси.ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(";, "anyType")); Отлично, создался объект XDTO. Без свойств, поскольку это anyType. Как теперь я туда теперь произвольный XML запихну?
#27 by vicof
Чтобы он встроился между <soap:Envelope xmlns:soap=";;                 <soap:Header/>                 <soap:Body> <request xmlns=";;                                xmlns:xs=";;                                xmlns:xsi=";ВОТ СЮДА ВОТ </request></soap:Body> </soap:Envelope> и воспринялся как часть запроса, отправляемого на сервер
#28 by Fragster
скинь на WSDL
#29 by DmitrO
ну по идее тебе изначально надо строить объект XDTO а не строку, или у тебя иначально есть откуда-то строка и ты ее не строишь?
#30 by Serginio1
Зачем тебе anyType? Создавай уже по известному типу. Либо как я уже тебе писал Только создавай свой объект через Прокси.ФабрикаXDTO
#31 by DmitrO
у него может и типа-то в схеме такого нет
#32 by vicof
ты понял :) Нету типа, просто левый ХМЛ, нужный сторонней системе.
#33 by Serginio1
Прокси.ФабрикаXDTO.ПрочитатьXML(<ЧтениеXML>, <Тип>) либо формировать через anyType как в
#34 by Fragster
и правда нету типов, передавай что как хочешь
#35 by Fragster
тогда так:
#36 by Fragster
Добавить (Add) Вариант синтаксиса: Установка значения нового произвольного свойства Синтаксис: Добавить(<Форма>, <URIПространстваИмен>, <ЛокальноеИмя>, <ЭлементДанных>) Параметры: Тип: ФормаXML. Форма XML представления произвольного свойства. Может принимать значения Элемент или Атрибут. <URIПространстваИмен> (обязательный) Тип: Строка. URI пространства имен XML представления произвольного свойства. Тип: Строка. Локальное имя произвольного свойства. Тип: ЗначениеXDTO; ОбъектXDTO. Элемент данных XDTO (значение или объект), являющийся значением произвольного свойства. Описание варианта метода: Имя свойства будет создано автоматически, на основе локального имени XML представления свойства. В случае, если произвольное свойство с полученным именем уже существует и если предыдущая установка значения произвольного свойства выполнялась для данного произвольного свойства, либо другого свойства в случае наличия последовательности, свойство становится списковым с неограниченной верхней границей. В противном случае будет инициировано исключение. Тип создаваемого свойства всегда устанавливается anyType пространства имен схемы XML.
#37 by vicof
Так нельзя - появляется новый тэг, в котором будет нужный ХМЛ. Этого тэга быть не должно.
#38 by vicof
+ Поэтому и сделал через СериализаторXDTO.ЗаписатьXDTO(ТекстСМоимХМЛ); но в таком виде экранируются угловые скобки.
#39 by Fragster
выкинь нафиг тот текст XML, которые есть у тебя
#40 by vicof
Отлично, а что взамен?
#41 by Serginio1
Фрмируй свой объект с нужными тебе тегами Еще раз
#42 by Fragster
+ либо преобразуй его в объектXDTO
#43 by Serginio1
#44 by Fragster
я предлагаю вместо формирования XML формировать объект
#45 by vicof
Супер, сработало :) Ставлю 100 лайков, благодарю. Если хочешь, можем пива сходить попить за мой счет.
#46 by Fragster
а смысл где-то в коде формировать XML, а потом преобразовывать его в объект XDTO? Лично мне такое пришлось делать только когда у меня реально на входе был XML. Подозреваю, что у автора не тот случай.
#47 by Serginio1
Спасибо. Не пью. На здоровье.
#48 by vicof
У автора такой случай. Возможно, такой уклад изменится, но пока так.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С