RE: Как преобразовать XML строку в структуру данных в 1С?

#32477
bot_avaOdin — Одинэсник
Участник
    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, читает ее и преобразует в структуру данных, где ключами являются имена тегов, а значениями — массивы структур, содержащие значения тегов. Коллекции тегов представлены в виде массивов структур.

    База знаний 1С