рубрики: XML | Дата: 27 декабря, 2015
В этой статье рассмотрим последовательную запись и чтение xml файлов при помощи объектов ЗаписьXML и ЧтениеXML
Предположим, что нам надо записать xml файл с описанием нескольких сайтов. Для этих сайтов нам надо записать оценку сайта и его краткое содержание. И соответственно потом нам надо будет этот файл прочитать.
Напомню, что xml файл может состоять из элементов и атрибутов. Соответственно элемент может содержать какой-то текст, атрибуту также можно присвоить строковое значение. Также напоминаю, что у xml файла может быть только один корневой элемент в который вложены все остальные.
Итак начнем шаг за шагом создавать наш файл. Для начала создадим объект ЗаписьXML, создадим заголовок xml файла, и запишем файл.
ЗаписьХМЛ = Новый ЗаписьXML;
ЗаписьХМЛ.ОткрытьФайл("d:\musor\test.xml");
ЗаписьХМЛ.ЗаписатьОбъявлениеXML();
ЗаписьХМЛ.Закрыть();
В результате выполнения этого кода получаем xml файл следующего содержания:
<?xml version="1.0" encoding="UTF-8">
Собственно кроме объявления xml здесь ничего и нет.
Теперь добавим корневой элемент внутрь которого потом сложим все остальные элементы. Назовем этот элемент Сайты
ЗаписьХМЛ = Новый ЗаписьXML;
ЗаписьХМЛ.ОткрытьФайл("d:\musor\test.xml");
ЗаписьХМЛ.ЗаписатьОбъявлениеXML();
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Сайты");
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.Закрыть();
Смотрим файл:
<?xml version="1.0" encoding="UTF-8">
<Сайты/>
Теперь в промежутке между процедурами ЗаписатьНачалоЭлемента(«Сайты») и ЗаписатьКонецЭлемента() допишем формирование остальных элементов и атрибутов.
ЗаписьХМЛ = Новый ЗаписьXML;
ЗаписьХМЛ.ОткрытьФайл("d:\musor\test.xml");
ЗаписьХМЛ.ЗаписатьОбъявлениеXML();
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Сайты");
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("АдресСайта");
ЗаписьХМЛ.ЗаписатьАтрибут("Оценка", "Отлично");
ЗаписьХМЛ.ЗаписатьТекст("www.professia1c.ru");
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Описание");
ЗаписьХМЛ.ЗаписатьТекст("Сайт о программировании в 1С");
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("АдресСайта");
ЗаписьХМЛ.ЗаписатьНачалоАтрибута("Оценка");
ЗаписьХМЛ.ЗаписатьТекст("Хорошо");
ЗаписьХМЛ.ЗаписатьКонецАтрибута();
ЗаписьХМЛ.ЗаписатьТекст("www.drugoysite.ru");
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Описание");
ЗаписьХМЛ.ЗаписатьТекст("Сайт о программировании на других языках");
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.Закрыть();
Здесь стоит отметить, что атрибуты должны записываться после начала записи элемента и перед записью текста элемента.
И как можно заметить атрибут можно записать двумя способами. Вот итоговый вариант сформированного xml файла:
<Сайты>
<АдресСайта Оценка="Отлично">www.professia1c.ru
<Описание>Сайт о программировании в 1С</Описание>
</АдресСайта>
<АдресСайта Оценка="Хорошо">www.drugoysite.ru
<Описание>Сайт о программировании на других языках</Описание>
</АдресСайта>
</Сайты>
С записью разобрались. Теперь будем читать, созданный нами файл.
С помощью объекта ЧтениеXML выполняется последовательное чтение узлов xml файла. Каждый прочитанный узел приходиться анализировать, т.к. не все узлы нам нужны (в частности корневой элемент). Также необходимо анализировать тип узла. Это может быть НачалоЭлемента, КонецЭлемента, Атрибут и т.д. Плюс еще атрибутов в отличие от нашего примера может быть несколько. В общем чтение xml процесс немного более запутанный чем его запись. Итак вернемся к нашему примеру. Не буду разбирать его построчно. Привожу сразу весь код целиком:
ЧтениеХМЛ = Новый ЧтениеXML;
ЧтениеХМЛ.ОткрытьФайл("d:\musor\test.xml");
Пока ЧтениеХМЛ.Прочитать() Цикл
// Пропускаем корневой элемент
Если ЧтениеХМЛ.Имя = "Сайты" Тогда
Продолжить;
КонецЕсли;
// Обрабатываем атрибуты
Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеХМЛ.Имя = "АдресСайта" Тогда
ЧтениеХМЛ.ПрочитатьАтрибут();
СтрокаОценка = "Оценка: " + ЧтениеХМЛ.ЗначениеАтрибута("Оценка");
КонецЕсли;
Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеХМЛ.Имя = "Описание" Тогда
Сообщить(СтрокаОценка);
КонецЕсли;
// Обрабатываем вывод элементов
Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ИмяЭлемента = ЧтениеХМЛ.Имя;
ИначеЕсли ЧтениеХМЛ.ТипУзла = ТипУзлаXML.Текст Тогда
Сообщить(ИмяЭлемента + ": " + ЧтениеХМЛ.Значение);
КонецЕсли;
Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеХМЛ.Имя = "АдресСайта" Тогда
Сообщить("--------------------------------");
КонецЕсли;
КонецЦикла;
ЧтениеХМЛ.Закрыть();
Результатом выполнения этого кода будет следующий текст в окне сообщений:
АдресСайта: www.professia1c.ru
Оценка: Отлично
Описание: Сайт о программировании в 1С
--------------------------------
АдресСайта: www.drugoysite.ru
Оценка: Хорошо
Описание: Сайт о программировании на других языках
--------------------------------
Добавить комментарий