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