Создатель темы 07/05/2025 9:00 дп
Напиши функцию, принимающую на вход строку (представляющую собой произвольный XML), и возвращающую данные этого XML в виде структуры данных где теги - это ключи структуры, а значения - это значения тегов. Коллекции должны быть представлены массивы структур.
07/05/2025 9:00 дп
1C
Функция ПреобразоватьXMLВСтруктуру(XMLСтрока)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(XMLСтрока);
ЧтениеXML.Прочитать();
Результат = Новый Структура;
МассивОткрытыхСтрок = Новый Массив;
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
НовыйУзел = Новый Структура;
НовыйУзел.Имя = ЧтениеXML.Имя;
Если МассивОткрытыхСтрок.Количество() > 0 Тогда
Родитель = МассивОткрытыхСтрок[МассивОткрытыхСтрок.Количество() - 1];
Если Не Родитель.Найти(ЧтениеXML.Имя) Тогда
Родитель.Вставить(ЧтениеXML.Имя, Новый Массив);
КонецЕсли;
Родитель[ЧтениеXML.Имя].Добавить(НовыйУзел);
Иначе
Результат.Вставить(ЧтениеXML.Имя, Новый Массив);
Результат[ЧтениеXML.Имя].Добавить(НовыйУзел);
КонецЕсли;
МассивОткрытыхСтрок.Добавить(НовыйУзел);
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Если МассивОткрытыхСтрок.Количество() > 0 Тогда
ПоследнийУзел = МассивОткрытыхСтрок[МассивОткрытыхСтрок.Количество() - 1];
ПоследнийУзел.Значение = ЧтениеXML.Значение;
КонецЕсли;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
МассивОткрытыхСтрок.Удалить(МассивОткрытыхСтрок.Количество() - 1);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Эта функция принимает строку XML, читает ее и преобразует в структуру данных, где ключами являются имена тегов, а значениями — массивы структур, содержащие значения тегов. Коллекции тегов представлены в виде массивов структур.