В этом случае мы воспользовались классом XmlTextReader для считывания информации из файла. Класс XmlTextReader также позволяет разбирать содержимое XML-документа, но он не создает копию файла в памяти, а считывает его в один проход элемент за элементом. Переход к следующему элементу осуществляется вызовом метода Read().
20. Теперь нужно создать процедуру сохранения данных текущего дня в файл. Эта процедура должна запускаться при переходе от одной даты к другой, а также в момент закрытия приложения. Ее код приведен в листинге 6.9.
Листинг 6.9Private Sub Data_Save(ByVal MyDate As String)
Dim MyCount, MyIndex As Integer
\'Создаем объект XmlDocument
Dim myxml As New Xml.XmlDocument
dirStr = IO.Path.GetDirectoryName_
(Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase.ToString)
\'Загружаем файл в объект XmlDocument
myxml.Load(dirStr + «\2005.xml»)
\'Перебираем все узлы уровня Data и находим сохраняемую дату
For MyCount = 0 To myxml.ChildNodes(1). ChildNodes.Count – 1
If myxml.ChildNodes(1). ChildNodes(MyCount). Attributes(0). InnerText = MyDate Then
\'Удаляем все содержимое этого узла
myxml.ChildNodes(1). ChildNodes(MyCount). RemoveAll()
\'И заполняем его текущим содержимым полей ListView. При этом мы создаем
\'заново атрибуты узла Data и узлы Index со всеми атрибутами для каждой
\'строки ListView
\'Создаем атрибут value для текущего узла Data
Dim myValue As Xml.XmlAttribute = myxml.CreateAttribute(«value»)
\'Присваиваем атрибуту value значение текущей даты
myValue.InnerText = MyDate
\'Добавляем атрибут value к текущему узлу Data
myxml.ChildNodes(1). ChildNodes(MyCount). Attributes.Append(myValue)
\'Проделываем предыдущие операции с атрибутом Cnt
Dim mIndex As Xml.XmlAttribute = myxml.CreateAttribute(«Cnt»)
mIndex.InnerText = ListView1.Items.Count
myxml.ChildNodes(1). ChildNodes(MyCount). Attributes.Append(mIndex)
\'Заполняем узел Data вложенными элементами Index
For MyIndex = 0 To ListView1.Items.Count – 1
Dim oIndex As Xml.XmlElement = myxml.CreateElement(«index»)
myxml.ChildNodes(1). ChildNodes(MyCount). AppendChild(oIndex)
Dim oCategory As Xml.XmlAttribute = myxml.CreateAttribute(«Category»)
oCategory.InnerText = ListView1.Items(MyIndex). SubItems(0). Text
myxml.ChildNodes(1). ChildNodes(MyCount). ChildNodes_
(MyIndex). Attributes.Append(oCategory)
Dim oStartOf As Xml.XmlAttribute = myxml.CreateAttribute(«StartOf»)
oStartOf.InnerText = ListView1.Items(MyIndex). SubItems(1). Text
myxml.ChildNodes(1). ChildNodes(MyCount). ChildNodes_
(MyIndex). Attributes.Append(oStartOf)
Dim oEndOf As Xml.XmlAttribute = myxml.CreateAttribute(«EndOf»)
oEndOf.InnerText = ListView1.Items(MyIndex). SubItems(2). Text
myxml.ChildNodes(1). ChildNodes(MyCount). ChildNodes_
(MyIndex). Attributes.Append(oEndOf)
Dim oNote As Xml.XmlAttribute = myxml.CreateAttribute(«Note»)
oNote.InnerText = ListView1.Items(MyIndex). SubItems(3). Text
myxml.ChildNodes(1). ChildNodes(MyCount). ChildNodes_
(MyIndex). Attributes.Append(oNote)
Next
\'Если найден и заполнен требуемый узел Data, прекращаем перебор узлов
Exit For
End If
Next
\'Сохраняем документ в файл
myxml.Save(dirStr + «\2005.xml»)
End Sub