Одной из полезных особенностей. NET CF является возможность легкой записи информации в XML-формате и последующее считывание ее из XML-файла. Из трех классов, предназначенных для работы с XML, в приложении будут использоваться классы XMLTextReader и XMLDocument. На самом деле можно было бы обойтись только классом XMLDocument, но класс XMLTextReader весьма полезен, и не хотелось бы пропускать демонстрацию его применения.
Фомат XML является форматом разметки (структурирования записи) данных. Как и HTML, XML основан на концепции тегов разметки. Но в отличие от HTML, теги XML не имеют предопределенных значений. Это значит, что, в общем случае, получатель документа может знать, как теги вложены друг в друга, какое положение один тег занимает относительно другого в документе, но ничего не может сказать относительно назначения этих тегов и информации, записанной в них. Придание значения той или иной информации, структурированной в XML-файле, ложится на плечи программы, разбирающей этот файл.
Код простейшего XML-файла показан в листинге 6.4.
Листинг 6.4
2
Первая строка является описанием XML-документа. Она позволяет указывать версию XML и кодировку, в которой записан документ. Затем следует тег с именем Y2005. Этот тег состоит из открывающей () и закрывающей () частей. Внутри тега Y2005 расположены теги с именем Date. Все три тега Date не пустые, поэтому тоже имеют открывающую и закрывающую часть. Внутри тегов Date вложены теги Index. Первые два тега Index пустые, они состоят из одной части, которая одновременно открывает и закрывает этот тег. Внутри тега Index в первых двух случаях записано значение value. Значения, записанные внутри скобок тега, называются атрибутами. Любой тег может иметь любое количество атрибутов, но только одно значение. Значение записывается между открывающей и закрывающей частью тега.
Любой XML-документ должен начинаться с одного тега, который называется корневым тегом. В нашем случае корневым тегом является тег Y2005.
Что нам надо хранить в нашем XML-документе? Это должна быть информация о дате, для которой мы выполняем хронометраж, о категории работы, о времени начала работы, о времени ее окончания и примечания к каждой записи, если они необходимы. Структура нашего XML-файла приведена в листинге 6.5.
Листинг 6.5
Заголовочная часть:
Корневой тег:
Столько тегов Date, сколько дней мы будем контролировать:
Столько тегов Index, сколько отрезков времени мы учтем за день:
…
В каждом теге Date есть два атрибута. Атрибут value несет в себе дату, а Cnt – количество записей за день. В каждом теге Index есть четыре атрибута. В атрибуте Category указывается категория занятия, в атрибуте StartOf – время начала, в атрибуте EndOf – время окончания, а атрибут Note предназначен для хранения примечания.
Файл с такой структурой должен быть создан при первом запуске программы, прочитан и отредактирован при каждом последующем запуске.
Упражнение 6.2 (продолжение)
17. При запуске нашего приложения необходимо проверить, существует ли файл 2005.xml, в котором записаны результаты контроля времени, и файл Category.xml, в котором содержится список категорий. Если данные файлы не существуют, то их надо создать. Если файлы все еще существуют, то их нужно загрузить. Эти операции будут проводиться в обработчике события загрузки основной формы приложения. Но перед этим в класс формы нужно добавить две переменные. В окне Solution Explorer нужно выделить файл Form1.vb и из контекстного меню выполнить для этого файла команду View Code. Затем в самое начало кода нужно добавить строки, приведенные в листинге 6.6.
Листинг 6.6
Public Class Form1
Inherits System.Windows.Forms.Form
Friend WithEvents ListView1 As System.Windows.Forms.ListView
Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
\'Добавленные переменные
Dim D As DateTime
Dim dirStr As String
18. Теперь можно создать процедуру обработчика события загрузки формы, код которой приведен в листинге 6.7. Листинг 6.7
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
\'Если файл с данными отсутствует в текущем каталоге, мы его создаем, для
\'этого сначала получаем полный путь каталога, в котором расположена
\'программа, в строковую переменную dirStr
dirStr = IO.Path.GetDirectoryName_
(Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase.ToString)
\'Проверяем, есть ли файл c заданным именем по полученному пути
If Not System.IO.File.Exists(dirStr + «\2005.xml») Then
\'Если файла нет – создаем его
\'Создаем экземпляр XmlDocument
Dim myxmlDoc As New Xml.XmlDocument
\'Создаем корневой тег и добавляем его к документу
Dim oROOT As Xml.XmlElement = myxmlDoc.CreateElement(«Y2005»)
myxmlDoc.AppendChild(oROOT)
\'Получаем текущую дату в переменную myDate
Читать дальше
Конец ознакомительного отрывка
Купить книгу