Система 1С:Предприятие 8.2 позволяет работать с XML-документами с помощью базовых объектов ЧтениеXML и ЗаписьXML. Объекты позволяют последовательно получать и записывать фрагменты данные в файл XML, тем самым документ не загружается в оперативную память полностью.
Рассмотрим пример записи данных в XML-документ с использованием объекта ЗаписьXML. Выгрузим номенклатуру в файл XML (листинг 1).
Листинг 1 — Пример записи XML-документа средствами встроенного языка 1С:Предприятие 8.2:
&НаКлиенте Процедура ЗаписьДанных(Команда) ВыполнитьЗаписьДанных(); КонецПроцедуры &НаСервереБезКонтекста Процедура ВыполнитьЗаписьДанных() ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл("d:\temp\tovar.xml"); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("Корневой"); // Записать атрибут элемента Корневой ЗаписьXML.ЗаписатьАтрибут("Справочник", "Номенклатура"); ЗаписьXML.ЗаписатьКомментарий("Элементы справочника:"); Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ЭтоГруппа Тогда Продолжить; КонецЕсли; ЗаписьXML.ЗаписатьНачалоЭлемента("ЭлементСправочника"); ЗаписьXML.ЗаписатьНачалоЭлемента("Код"); ЗаписьXML.ЗаписатьТекст(Выборка.Код); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("Наименование"); ЗаписьXML.ЗаписатьТекст(Выборка.Наименование); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("Цена"); ЗаписьXML.ЗаписатьТекст(СокрЛП(Выборка.Цена)); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьКонецЭлемента(); КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.Закрыть(); КонецПроцедуры
Процедура ЧтениеДанных() последовательно читает узлы из XML-документа (листинг 2). Тип узла определяется системным перечислением ТипУзлаXML .
Листинг 2 — чтение XML-документа:
&НаКлиенте Процедура ЧтениеДанных(Команда) ФайлXML = Новый ЧтениеXML; ФайлXML.ОткрытьФайл("d:\temp\tovar.xml"); Сообщение = Новый СообщениеПользователю(); Пока ФайлXML.Прочитать() Цикл Если ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Сообщение.Текст = ФайлXML.Имя; Сообщение.Сообщить(); Пока ФайлXML.ПрочитатьАтрибут() Цикл Сообщение.Текст = "Атрибут: " + ФайлXML.Имя + " = " + ФайлXML.Значение; Сообщение.Сообщить(); КонецЦикла; КонецЕсли; Если ФайлXML.ТипУзла = ТипУзлаXML.Текст Тогда Сообщение.Текст = ФайлXML.Значение; Сообщение.Сообщить(); КонецЕсли; Если ФайлXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда Сообщение.Текст = "/" + ФайлXML.Имя; Сообщение.Сообщить(); КонецЕсли; КонецЦикла; ФайлXML.Закрыть(); КонецПроцедуры