Запись XML
Запись простого XML-документа
Для записи XML-документа предназначен тип ЗаписьXml. В общем случае записывать XML-документ можно в экземпляр, производный от экземпляра типа ПотокЗаписи. Мы будем рассматривать запись документа в файл.
Самый простой случай XML-документа — это объявление документа и корневой тег. В нашем
случае это тег <note>
. Объявление документа — это
обязательный элемент любого XML-документа. Поэтому использование пары методов
ЗаписатьНачалоДокумента()/ЗаписатьКонецДокумента()
является обязательным для записи любого XML-документа. Таким же обязательным
элементом любого XML-документа является корневой тег.
- ЗаписатьНачалоЭлемента() — для того чтобы записать открывающий
тег:
<note>
. - ЗаписатьКонецЭлемента() — для того чтобы записать закрывающий
тег:
</note>
.
Запись XML. Шаг 1
метод Скрипт()
пер Файл = новый Файл("c:\\temp\\note.xml")
пер Запись = новый ЗаписьXml(Файл.ОткрытьПотокЗаписи())
Запись.ЗаписатьНачалоДокумента()
Запись.ЗаписатьНачалоЭлемента("note")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьКонецДокумента()
;
Запись элементов XML-документа
После того как мы сформировали простой XML-документ, наполним этот документ оставшимся содержимым. Так как XML-документ имеет иерархическую структуру, где иерархию образуют вложенные теги, записывать теги следует с учетом их вложенности. Для этого необходимо начинать подчиненный элемент после указания начала родительского элемента, но до окончания родительского элемента.
Каждый тег записывается своей парой методов ЗаписатьНачалоЭлемента()/ЗаписатьКонецЭлемента(). В результате работы нашего примера получится документ, очень похожий на оригинальный, только в нем отсутствуют значения элементов:
<?xml version='1.0' encoding='UTF-8'?>
<note>
<to/>
<from/>
<heading/>
<body/>
</note>
В исходном тексте, который формирует новый XML-документ, отступ элементов
<to>
, <from>
,
<heading>
и <body>
сделан
исключительно из соображений более удобного восприятия примера. В реальных
программах так делать не обязательно.
Запись XML. Шаг 2
метод Скрипт()
пер ВременныйКаталог = СредаИсполнения.ПолучитьПеременную("temp")
пер Файл = новый Файл(ВременныйКаталог + "\\note.xml")
пер Запись = новый ЗаписьXml(Файл.ОткрытьПотокЗаписи())
Запись.ЗаписатьНачалоДокумента()
Запись.ЗаписатьНачалоЭлемента("note")
Запись.ЗаписатьНачалоЭлемента("to")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьНачалоЭлемента("from")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьНачалоЭлемента("heading")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьНачалоЭлемента("body")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьКонецДокумента()
;
Запись содержимого элементов XML-документа
Для записи текста, который будет расположен «внутри» тегов XML-документа, предназначен метод ЗаписатьТекст(Текст: Строка). Параметр этого метода будет записан в качестве содержимого того элемента, который в данный момент является открытым. Теперь наш документ стал полностью соответствовать примеру:
<?xml version='1.0' encoding='UTF-8'?><note>
<to>Иван</to>
<from>Петр</from>
<heading>Напоминание</heading>
<body>Не забудь о встрече в эти выходные</body>
</note>
Запись XML. Шаг 3
метод Скрипт()
пер ВременныйКаталог = СредаИсполнения.ПолучитьПеременную("temp")
пер Файл = новый Файл(ВременныйКаталог + "\\note.xml")
пер Запись = новый ЗаписьXml(Файл.ОткрытьПотокЗаписи())
Запись.ЗаписатьНачалоДокумента()
Запись.ЗаписатьНачалоЭлемента("note")
Запись.ЗаписатьНачалоЭлемента("to")
Запись.ЗаписатьТекст("Иван")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьНачалоЭлемента("from")
Запись.ЗаписатьТекст("Петр")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьНачалоЭлемента("heading")
Запись.ЗаписатьТекст("Напоминание")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьНачалоЭлемента("body")
Запись.ЗаписатьТекст("Не забудь о встрече в эти выходные")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьКонецДокумента()
;
Запись атрибутов элемента XML
Последним действием, которое мы рассмотрим в части записи XML-документа, будет запись
атрибута XML-элемента. Допустим, мы хотим добавить к отправителю и получателю нашей
заметки псевдонимы отправителя и получателя. Для этого будем использовать атрибут
@nickname
.
Для записи атрибута используется метод ЗаписатьАтрибут(). Записывать атрибут необходимо сразу после метода ЗаписатьНачалоЭлемента(). В метод передаются сразу оба значения: имя атрибута и его (атрибута) значение. В результате наш XML-документ будет выглядеть следующим образом:
<?xml version='1.0' encoding='UTF-8'?> <note> <to nickname="developer">Иван</to> <from nickname="boss">Петр</from> <heading>Напоминание</heading> <body>Не забудь о встрече в эти выходные</body> </note>
Если требуется указать несколько атрибутов для одного элемента — следует использовать метод ЗаписатьАтрибут() столько раз, сколько атрибутов требуется указать.
Запись XML. Шаг 4
метод Скрипт()
пер ВременныйКаталог = СредаИсполнения.ПолучитьПеременную("temp")
пер Файл = новый Файл(ВременныйКаталог + "\\note.xml")
пер Запись = новый ЗаписьXml(Файл.ОткрытьПотокЗаписи())
Запись.ЗаписатьНачалоДокумента()
Запись.ЗаписатьНачалоЭлемента("note")
Запись.ЗаписатьНачалоЭлемента("to")
Запись.ЗаписатьАтрибут("nickname", "developer")
Запись.ЗаписатьТекст("Иван")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьНачалоЭлемента("from")
Запись.ЗаписатьАтрибут("nickname", "boss")
Запись.ЗаписатьТекст("Петр")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьНачалоЭлемента("heading")
Запись.ЗаписатьТекст("Напоминание")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьНачалоЭлемента("body")
Запись.ЗаписатьТекст("Не забудь о встрече в эти выходные")
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьКонецЭлемента()
Запись.ЗаписатьКонецДокумента()
;
Запись содержимого элементов и значения атрибутов XML-документа в различных типах
Записывать содержимое элементов в XML-документ можно также в различных типах. Для того чтобы тип данных был записан в соответствии со стандартом XML, предназначены следующие методы:
- ЗаписатьБайты(Значение: Байты)
- Записывает текст элемента как Байты в шестнадцатеричной кодировке
- ЗаписатьБайтыBase64(Значение: Байты)
- Записывает текст элемента как Байты в кодировке Base64
- ЗаписатьБулево(Значение: Булево)
- Записывает текст элемента как Булево
- ЗаписатьВремя(Значение: Время)
- Записывает текст элемента как Время
- ЗаписатьДату(Значение: Дата)
- Записывает текст элемента как тип Дата
- ЗаписатьДатаВремя(Значение: ДатаВремя)
- Записывает текст элемента как ДатаВремя
- ЗаписатьДлительность(Значение: Длительность)
- Записывает текст элемента как Длительность
- ЗаписатьМомент(Значение: Момент, ЧасовойПояс: ЧасовойПояс? = Неопределено)
- Записывает текст элемента как Момент в указанном часовом поясе. Если параметр ЧасовойПояс не указан, Момент записывается в часовом поясе UTC
- ЗаписатьУуид(Значение: Ууид)
- Записывает текст элемента как Ууид
- ЗаписатьЧисло(Значение: Число)
- Записывает текст элемента как Число: приводит к десятичной записи, обрезает лишние нули. Если число было целым, в конце ставится .0
- Ууид / Число / Булево
- Байты / БайтыBase64
- Время / ДатаВремя / Дата / Длительность / Момент
Данные методы начинаются с префикса ЗаписатьАтрибут. Например, для того чтобы записать атрибут элемента как Число, следует использовать метод:
ЗаписатьАтрибутЧисло(Имя: Строка,
Значение: Число,
ПространствоИмен: Строка? = Неопределено): ЗаписьXml