1С 8.x Управляемое приложение 1С 7.7. Бухучет Статьи Ссылки
1С 8.x arrow 1С 8.x arrow Узелки на память arrow Работа с XML
Работа с XML Печать

ЗАПИСЬ В XML-ФАЙЛ

 

Для записи элемента XML-документа используются методы ЗаписатьНачалоЭлемента(), ЗаписатьАтрибут(), Записать-Текст(), ЗаписатьКонецЭлемента(), которые производят запись соответствующего узла элемента XML в файл

 

ФОРМАТ  ОПИСАНИЕ ЭЛЕМЕНТА (УЗЛА)

<ИМЯ АТРИБУТ=Значение>
Содержимое (Текст или описание другого элемента)
</ИМЯ>

ЗаписьXML.ЗаписатьНачалоЭлемента("ИМЯ");
ЗаписьXML.ЗаписатьАтрибут("АТРИБУТ", "Значение");
ЗаписьXML.ЗаписатьТекст("Содержимое (Текст или описание другого элемента)");
ЗаписьXML.ЗаписатьКонецЭлемента();

Если при определении начала элемента в соответствующем методе указывается его имя, то при закрытии имя не указывается. Закрывается элемент открытый последним. 

ЗаписьХМL = Новый ЗаписьXML;
ЗаписьXML. ОткрытьФайл( "с: \document. xml");

// Записать директиву
ЗаписьXML.ЗаписатьОбъявлениеХМL();
// Записать начало корневого элемента ЗаписьXML.ЗаписатьНачалоЭлемента( "Корневой");

// Записать атрибут корневого элеиента ЗаписьXML.ЗаписатьАтрибут("ИмяСправочника", "Номенклатура");
ЗаписьXML.
ЗаписатьКомментарий("Выгрузка элементов справочника");

Выборка = Справочники.Номенклатура.Выбрать();


Пока Выборка.Следующий() Цикл
Если Не Выборка.ЭтоГруппа Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("ЭлементСправочника");


ЗаписьXML.ЗаписатьНачалоЭлемента( "Код");
ЗаписьXML.ЗаписатьТекст(Строка(Выборка.Код));
ЗаписьXML.ЗаписатьКонецЭлемента();


ЗаписьXML.ЗаписатьНачалоЭлемента( "Наименование");
ЗаписьХМ ЗаписатьТекст (Выборка. Наименование):
ЗаписьXML.ЗаписатьКонецЭлемента();


ЗаписьXML.ЗаписатьНачалоЭлемента("ЗакупочнаяЦена");
ЗаписьXML.ЗаписатьТекст(Строка(Выборка.ЗакупочнаяЦена));
ЗаписьXML. ЗаписатьКонецЭлемента();


ЗаписьXML. ЗаписатьКонецЭлемента(); //Относится к "ЭлементСправочка"
КонецЕсли;
КонецЦикла;
ЗаписьXML. ЗаписатьКонецЭлемента(); //Относится к элементу "Корневой"
ЗаписьXML.Закрыть();

 

В результате получится следующее:

<?xml version="1.0"?>
<Корневой ИмяСправочника="Номенклатура">
  <!--Выгрузка элементов справочника-->
  <ЭлементСправочника>
<Код>5</Код>
<Наименование>BOSCH KGS 3760 IE </Наименование>
<ЗакупочнаяЦена>24 000</ЗакупочнаяЦена> </ЭлементСправочника>
<ЭлементСправочника>
<Код>6</Код>
<Наименование>ELECTROLUX ER 9007 В</Наименование>
<ЗакупочнаяЦена>38 000</ЗакупочнаяЦена> </ЗлементСправочника> <ЭлементСправочника>
<Код>3</Код>
< Наименование>Indesit WS 105 ТХ</Наименование>
<ЗакупочнаяЦена>10 000</ЗакупочнаяЦена> </ЭлементСправочника>
<ЭлементСправочника>
<Код>7</Код>
<Наименование>Атлант МХМ 1704-00</Наименование>
<ЗакупочнаяЦена>14 000</ЗакупочнаяЦена> </ЭлементСправочника>
<ЭлементСправочника>
<Код>2</Код>
<Наименование>Агdo TL 1000 ЕХ-1</Наименование>
<ЗакупочнаяЦена>8 000</ЗакупочнаяЦена>
  </ЭлементСправочника>
</Корневой>

 

ЧТЕНИЕ ИЗ XML-файла

При использовании сериализации при записи в XML-файл:

ПрочитатьXML() возвращает считанное из XML значение, но это значение еще не записано в базу данных. Если, например, считан элемент справочника, то для того, чтобы считанный элемент справочника оказался запи¬санным в базу данных, необходимо обратиться к его ме¬тоду Записать(), как и при «обычной» записи изменен¬ного состояния объекта. Это же относится и к другим объектам базы данных, менеджерам записи констант и наборам записей.


При чтении объекта базы данных из XML в базе данных производится поиск объекта с таким же значением ссылки Если такой объект найден, то считывание из XML выглядит так, как будто объект был прочитан из базы данных, после чего значения его реквизитов, таб¬личных частей и т. п. перезаписываются полученными из XML значениями. Если же объект по ссылке не найден, то считывание из XML выглядит как создание но¬вого объекта, установка ему значения ссылки и заполнение его содержимого значениями, прочитанными из XML.

 

Файл = Новый ЧтениеХМL;
Файл.ОткрытьФайл("с:\document.xml");

// Прочитать фрагменты элемента
Пока Файл.Прочитать() Цикл

// После чтения проверить тип узла
Если Файл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Сообщить(Файл.Имя);

// Прочитать атрибуты
Пока Файл.ПрочитатьАтрибут() Цикл
Сообщить("атрибут:" + Файл.Имя + "=" + Файл.Значение);
КонецЦикла;

КонецЕсли.

Если Файл.ТипУзла = ТипУзлаXML.Текст Тогда
Сообщить(Файл.Значение);
КонецЕсли;


Если Файл.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Сообщить("/" + Файл.Имя);
КонецЕсли;
КонецЦикла;

Файл.Закрыть();