Прочитать xml таблицу. Преобразует текст указанного формата XML в таблицу значений,
// Преобразует текст указанного формата XML в таблицу значений,
// при этом колонки таблицы формируются на основе описания в XML.
//
// Схема XML:
// <?xml version="1.0" encoding="utf-8"?>
// <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
// <xs:element name="Items">
// <xs:complexType>
// <xs:sequence>
// <xs:element maxOccurs="unbounded" name="Item">
// <xs:complexType>
// <xs:attribute name="Code" type="xs:integer" use="required" />
// <xs:attribute name="Name" type="xs:string" use="required" />
// <xs:attribute name="Socr" type="xs:string" use="required" />
// <xs:attribute name="Index" type="xs:string" use="required" />
// </xs:complexType>
// </xs:element>
// </xs:sequence>
// <xs:attribute name="Description" type="xs:string" use="required" />
// <xs:attribute name="Columns" type="xs:string" use="required" />
// </xs:complexType>
// </xs:element>
// </xs:schema>
//
// Параметры:
// XML - Строка, ЧтениеXML - текст в формате XML или ЧтениеXML.
//
// Возвращаемое значение:
// Структура - со свойствами:
// * ИмяТаблицы - Строка - имя таблицы.
// * Данные - ТаблицаЗначений - преобразованная из XML таблица.
//
// Пример:
// КлассификаторТаблица = ПрочитатьXMLВТаблицу(
// Обработки.ЗагрузкаКурсовВалют.ПолучитьМакет("ОбщероссийскийКлассификаторВалют").ПолучитьТекст()).Данные;
//
Функция ПрочитатьXMLВТаблицу(Знач XML) Экспорт
Если ТипЗнч(XML) <> Тип("ЧтениеXML") Тогда
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XML);
Иначе
Чтение = XML;
КонецЕсли;
// Прочитаем первый узел и проверим его.
Если Не Чтение.Прочитать() Тогда
ВызватьИсключение НСтр("ru = 'Пустой XML'");
ИначеЕсли Чтение.Имя <> "Items" Тогда
ВызватьИсключение НСтр("ru = 'Ошибка в структуре XML'");
КонецЕсли;
// Получим описание таблицы и создадим ее.
ИмяТаблицы = Чтение.ПолучитьАтрибут("Description");
ИменаКолонок = СтрЗаменить(Чтение.ПолучитьАтрибут("Columns"), ",", Символы.ПС);
Колонок = СтрЧислоСтрок(ИменаКолонок);
ТаблицаЗначений = Новый ТаблицаЗначений;
Для Сч = 1 По Колонок Цикл
ТаблицаЗначений.Колонки.Добавить(СтрПолучитьСтроку(ИменаКолонок, Сч), Новый ОписаниеТипов("Строка"));
КонецЦикла;
// Заполним значения в таблице.
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента И Чтение.Имя = "Items" Тогда
Прервать;
ИначеЕсли Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда
Продолжить;
ИначеЕсли Чтение.Имя <> "Item" Тогда
ВызватьИсключение НСтр("ru = 'Ошибка в структуре XML'");
КонецЕсли;
новСтр = ТаблицаЗначений.Добавить();
Для Сч = 1 По Колонок Цикл
ИмяКолонки = СтрПолучитьСтроку(ИменаКолонок, Сч);
новСтр[Сч-1] = Чтение.ПолучитьАтрибут(ИмяКолонки);
КонецЦикла;
КонецЦикла;
// Заполним результат
Результат = Новый Структура;
Результат.Вставить("ИмяТаблицы", ИмяТаблицы);
Результат.Вставить("Данные", ТаблицаЗначений);
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПрочитатьТаблицуСовместимости (БСП)
Прочитать таблицу значений из XML
ПрочитатьДанныеИзБезопасногоХранилища (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)