XML в структуру

1. LomayaZakat 06.11.19 14:22 Сейчас в теме
Помогите пожалуйста преобразовать ответ сервера в структуру. Интересует именно значение SKU_CreateUpdateResult.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <SKU_CreateUpdateResponse xmlns="http://cowms.ru/service">
            <SKU_CreateUpdateResult>211895</SKU_CreateUpdateResult>
            <ErrorMessage />
        </SKU_CreateUpdateResponse>
    </soap:Body>
</soap:Envelope>
Показать
+
По теме из базы знаний
Найденные решения
2. LomayaZakat 06.11.19 15:21 Сейчас в теме
Пришел к этому. Чувствую, что можно проще.
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
Фабрика = Новый ФабрикаXDTO();
ОбъектXDTO =  Фабрика.ПрочитатьXML(ЧтениеXML);
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. user-z99999 67 06.11.19 15:24 Сейчас в теме
(1)
&НаСервереБезКонтекста
Функция ПрочитатьXMLВСтруктуру(Строка)
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(Строка);
	Результат = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Структура"));
	ЧтениеXML.Закрыть();
	
	Возврат Результат;
				
КонецФункции
Показать
+
4. LomayaZakat 06.11.19 15:26 Сейчас в теме
(3)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Строка);
Результат = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Структура"));
ЧтениеXML.Закрыть();


по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://schemas.xmlsoap.org/soap/envelope/}Envelope Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/core}Structure
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://schemas.xmlsoap.org/soap/envelope/}Body Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
+
2. LomayaZakat 06.11.19 15:21 Сейчас в теме
Пришел к этому. Чувствую, что можно проще.
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
Фабрика = Новый ФабрикаXDTO();
ОбъектXDTO =  Фабрика.ПрочитатьXML(ЧтениеXML);
+
5. Sashares 34 06.11.19 16:02 Сейчас в теме
(2)Куда уж проще.
aripos; LomayaZakat; +2
6. AlexandrSmith 69 06.11.19 17:25 Сейчас в теме
(2) В каком направлении чувствуете?
+
7. LomayaZakat 06.11.19 18:05 Сейчас в теме
(6)В плане того, что мб есть метод по которому можно задав SKU_CreateUpdateResult получить значение, не обращаясь напрямую
+
8. Pashekka 06.11.19 20:53 Сейчас в теме
Вариант получить значение по реквизиту
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
ДокументДОМ.ПолучитьЭлементыПоИмени("SKU_CreateUpdateResult")[0].ТекстовоеСодержимое
+
9. starik-2005 3036 06.11.19 21:14 Сейчас в теме
Чета странное какое-то задание преобразования "ответа сервера в структуру". Вот есть у Вас сервер, на нем есть веб-сервис - SOAP. Вот вы создаете к нему подключение (надеюсь, пользуетесь стандартным механизмом платформы для "дергания" сервиса). В итоге у Вас должен какой-то такой код быть:
  Ответ = Сервис.ФункцияСервиса(Параметры);

Вот в переменной "Ответ" и так "Структура" (т.е. объект XDTO), который Вы "подсветили" как правильный ответ. Или опять велосипеды изобретаем и дергаем веб-сервис с помощью подножных COM-объектов? )))
+
10. LomayaZakat 08.11.19 13:42 Сейчас в теме
12. starik-2005 3036 08.11.19 14:28 Сейчас в теме
(10) https://infostart.ru/public/721872/ - вот неплохое пошаговое руководство о том, как дергать веб-сервисы из 1С.
Обработка результата
В рецепте 1 мы чаще всего получаем готовый XDTO-объект и работаем с ним как со структурой. Во всех остальных случаях можно преобразовывать xml-ответ в XDTO

Если Результат.КодСостояния = 200 Тогда

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
ОбъектОтвет = СвояФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Сообщить(ОбъектОтвет.Body.Response.RESPONSE_ID);
Сообщить(ОбъектОтвет.Body.Response.RESPONSE_TEXT);

КонецЕсли; 
Показать

Тут все просто.
+
13. LomayaZakat 08.11.19 14:30 Сейчас в теме
(12)Ну я так и делал, 3 способ мой.
+
14. starik-2005 3036 08.11.19 14:30 Сейчас в теме
(13) ну как бы смысл-то так делать, если все-равно нужен объект?
+
15. LomayaZakat 08.11.19 14:33 Сейчас в теме
(14)Так смысл в том, что мне надо дернуть данные из ответа с структурированном виде.
Например тут, как мне их вытащить. Тут уже Фабрика не работает:

Код
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <Income_GetFactResponse xmlns="http://cowms.ru/inbound">
            <Income_GetFactResult>2019-11-08T09:18:15.268238+03:00</Income_GetFactResult>
            <Income_Positions>
                <Income_Positions>
                    <IncomeRequest_PositionCode>02a94191-6804-4ef4-9360-cc3500068966-1</IncomeRequest_PositionCode>
                    <Sku_id>211895</Sku_id>
                    <Unit_id>784</Unit_id>
                    <StockType_id>0</StockType_id>
                    <Qty>20.000000</Qty>
                    <ClientOrder_PositionCode />
                    <Serial />
                    <Series />
                    <ExpDate>2999-12-31T00:00:00</ExpDate>
                </Income_Positions>
                <Income_Positions>
                    <IncomeRequest_PositionCode>02a94191-6804-4ef4-9360-cc3500068966-2</IncomeRequest_PositionCode>
                    <Sku_id>211917</Sku_id>
                    <Unit_id>784</Unit_id>
                    <StockType_id>0</StockType_id>
                    <Qty>3.000000</Qty>
                    <ClientOrder_PositionCode />
                    <Serial />
                    <Series />
                    <ExpDate>2999-12-31T00:00:00</ExpDate>
                </Income_Positions>
            </Income_Positions>
            <ErrorMessage />
        </Income_GetFactResponse>
    </soap:Body>
</soap:Envelope>
Показать полностью
+
11. LomayaZakat 08.11.19 14:09 Сейчас в теме
Такой ответ таким способом не обрабатывает. Есть идеи?
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Income_GetFactResponse xmlns="http://cowms.ru/inbound">
<Income_GetFactResult>2019-11-08T09:18:15.268238+03:00</Income_GetFactResult>
<Income_Positions>
<Income_Positions>
<IncomeRequest_PositionCode>02a94191-6804-4ef4-9360-cc3500068966-1</IncomeRequest_PositionCode>
<Sku_id>211895</Sku_id>
<Unit_id>784</Unit_id>
<StockType_id>0</StockType_id>
<Qty>20.000000</Qty>
<ClientOrder_PositionCode />
<Serial />
<Series />
<ExpDate>2999-12-31T00:00:00</ExpDate>
</Income_Positions>
<Income_Positions>
<IncomeRequest_PositionCode>02a94191-6804-4ef4-9360-cc3500068966-2</IncomeRequest_PositionCode>
<Sku_id>211917</Sku_id>
<Unit_id>784</Unit_id>
<StockType_id>0</StockType_id>
<Qty>3.000000</Qty>
<ClientOrder_PositionCode />
<Serial />
<Series />
<ExpDate>2999-12-31T00:00:00</ExpDate>
</Income_Positions>
</Income_Positions>
<ErrorMessage />
</Income_GetFactResponse>
</soap:Body>
</soap:Envelope>
+
16. LomayaZakat 08.11.19 16:36 Сейчас в теме
Был не прав. Всё так же:

ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Данные);

ФактXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

Для Каждого Строка из ФактXDTO.Body.Income_GetFactResponse.Income_Positions.Income_Positions Цикл
КонецЦикла;
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот