Имя: Пароль:
1C
 
Чтение данных XML из сервиса
↓Ø (Волшебник 15.02.2024 12:58)
0 K1RSAN
 
14.02.24
15:52
В общем, в первый раз работаю по сути с сервисами, вот слегка запутался.
Я запросом HTTP получаю ответ в виде XML, но не понимаю, как его корректно прочитать
                
HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/xml"); 
Результат = HTTPСоединение.Получить(HTTPЗапрос);
СтрокаОтветаСервера = Результат.ПолучитьТелоКакСтроку();


Получаю строку. Но теперь не понимаю, как её построчно прочитать.
Или как лучше прочитать?
Записать в какой-то временный файл и считывать через ЧтениеXML ?
1 Волшебник
 
14.02.24
15:52
Чем читаете? Если 1С, то там есть пакеты XDTO и ФабрикаXDTO, которая за одну команду прочитает весь файл и разберёт его на дерево.
2 K1RSAN
 
14.02.24
15:54
(1) Ну вот у меня строка получается через HTTPСоединение, не знаю чем считывать.
В первый раз пришлось работать с сервисами. Посмотрю про XDTO, спасибо
3 K1RSAN
 
14.02.24
15:56
Чтение.ОткрытьФайл(ВыбранноеИмяФайла); - вот у меня нет выбранного имени файла, так как я не записываю данные в файл. У меня получается в виде строки.
Или надо тогда записать сначала в файл, а потом передать его имя?
4 Волшебник
 
14.02.24
16:08
Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
5 Волшебник
 
14.02.24
16:09
6 K1RSAN
 
15.02.24
05:56
(5) Спасибо
7 Ёпрст
 
15.02.24
09:06
(0) если че, у ЧтениеXML есть метод УстановитьСтроку.
можешь и без фабрики читать, хоть с ней и проще.
8 K1RSAN
 
15.02.24
10:53
(7) Я одно понять не могу.
Вот даже в инструкции есть какое-то ИмяФайла
А если я запросом получаю данные XML ? Ну нету у меня имени файла. Тогда надо записать будет или как?
9 Волшебник
 
15.02.24
11:02
(8) Ну что мешает сохранить во временный файл?
10 arsik
 
15.02.24
11:08
(8) Инструкции устарели. Смотри метод из (7)
11 K1RSAN
 
15.02.24
11:15
(10) Для открытия ЧтениеXML мне надо сначала открыть файл. Которого у меня нет, потому что я получаю строку через HTTP запрос.
Я вот и хочу узнать, как мне действовать? Записывать куда-то файл, чтобы потом его считаывать?
12 K1RSAN
 
15.02.24
11:16
(9) То есть я получаю ответ HTTP, считываю его как строку, а потом записываю во временный файл, чтобы считать, верно?
13 Builder
 
15.02.24
11:16
(12)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТвояСтрока);
14 K1RSAN
 
15.02.24
11:18
(13) Спасибо, это я и не мог понять
15 Builder
 
15.02.24
11:19
(12) еще вариант, у меня вариант из (13) вылетал с ошибкой на мобильной платформе например.
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьПоток(ТвояСтрока);
16 K1RSAN
 
15.02.24
12:00
В итоге тоже не помогло...

У меня строка ответа выглядит так

{"#",4238019d-7e49-4fc9-91db-b6b951d5cf8e,
{3,
{
{"S","Результат"},
{"B",1}
},
{
{"S","Данные"},
{"S","<?xml version=""1.0"" encoding=""UTF-8""?>
... там дальше структура XML с данными

Я понимаю, что вопрос странный, но я не могу найти нормальный ответ нигде, как всё-таки обработать этот несчастный запрос и прочитать из него XML
17 ptiz
 
15.02.24
12:04
(16) Это не XML. Это ЗначениеВСтрокуВнутр() со строкой XML.
18 K1RSAN
 
15.02.24
12:06
(17) Можно подробнее, что с этим делать?
19 Builder
 
15.02.24
12:08
(16) Разберись с тем, кто отдает XML, что бы отдавал действительно XML.
Или вытаскивай XML из того что отдают.
20 Builder
 
15.02.24
12:09
(18) Логично что ЗначениеИзСтрокиВнутр();
21 K1RSAN
 
15.02.24
12:14
(20) И?
22 Builder
 
15.02.24
12:19
(21) Что И? Открываем синтаксис-помощник, документацию, интернет и внимательно читаем и изучаем.
Вы там кем работаете?
23 K1RSAN
 
15.02.24
12:24
(22) Я ни разу не работал с XML ранее. Можно хоть какую-то информацию?
24 K1RSAN
 
15.02.24
12:27
(20)
ЗначениеВСтрокуВнутр (ValueToStringInternal)

Используется для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать для других целей не рекомендуется.

Согласно синтакс-помощнику это использовать нельзя.
25 arsik
 
15.02.24
12:33
(24) Так не используй. Вроде все просто
26 Builder
 
15.02.24
12:34
(24) Что не понятно - тебе отдают результат работы этой функции. Узнай зачем так сделано. Если не можешь или не хочешь - преобразуй обратно через ЗначениеИзСтрокиВнутр()
27 K1RSAN
 
15.02.24
12:35
(25) А можете подсказать КАК мне обработать этот ответ? Чтобы выцепить XML оттуда?
28 K1RSAN
 
15.02.24
12:35
(26) Мне пофиг зачем так сделано. Мне надо вытащить оттуда данные XML
29 Builder
 
15.02.24
12:40
(28) Вытаскивай, тебе все расписали как это сделать.
30 Garykom
 
15.02.24
12:41
(27) Подсказываю:
Обратиться к начальнику и сказать что "сервис какую то хрень возвращает вместо XML"
31 K1RSAN
 
15.02.24
12:45
(29)
ЗначениеИзСтрокиВнутр() - сделал
При попытке чтения XML - фатальная ошибка Document is empty
32 Волшебник
 
15.02.24
12:46
(16) Это не XML.
33 Builder
 
15.02.24
12:47
(31) Жесть....
Ты думаешь что ЗначениеИзСтрокиВнутр() вернет XML?
Я ХЗ что он там вернет - структуру или соответствие, а может еще что-то. И вот оттуда уже вытаскивай XML.
34 Волшебник
 
15.02.24
12:47
Я ветку топлю. Не морочьте людям голову
35 K1RSAN
 
15.02.24
12:48
(32) И из такой структуры никак не получить XML?
Просто это сторонний сервис, а не наш. Коммуникация с разработчиком сервиса может быть затруднена.
36 K1RSAN
 
15.02.24
12:48
(33) Ну то есть ты не знаешь, как делать, но при этом - "тебе все расписали как это сделать" )
37 Builder
 
15.02.24
12:50
(36) Что там тебе вернули - посмотреть можно только у тебя, мы тут конечно все телепаты, но не до такой степени....
38 K1RSAN
 
15.02.24
12:50
Да уж, видимо в ютубе уже проще найти нужную информацию и помощь, чем на профильном форуме. Ну что поделать
39 Garykom
 
15.02.24
12:51
(35) Ты понимаешь что это уже не твой уровень проблемы?
Требуй мануал с описанием что в ответе сервиса
40 K1RSAN
 
15.02.24
12:51
(37) Наверное, поэтому я и спрашиваю, что и как можно посмотреть. Скинул начало строки ответа.
41 Garykom
 
15.02.24
12:52
(38) Проблема не в профильном форуме
А в неправильных вопросах
42 Волшебник
 
15.02.24
12:58
(38) Воу-воу! Полехче...
43 Волшебник
 
15.02.24
12:58
Да, поищите в ютубе, как разобрать эту хрень. Удачи