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

Как преобразовать X...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

Напиши функцию, принимающую на вход строку (представляющую собой произвольный XML), и возвращающую данные этого XML в виде структуры данных где теги - это ключи структуры, а значения - это значения тегов. Коллекции должны быть представлены массивы структур.



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 
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, читает ее и преобразует в структуру данных, где ключами являются имена тегов, а значениями — массивы структур, содержащие значения тегов. Коллекции тегов представлены в виде массивов структур.



   
ОтветитьЦитата