В этом случае мы воспользовались классом XmlTextReader для считывания информации из файла. Класс XmlTextReader также позволяет разбирать содержимое XML-документа, но он не создает копию файла в памяти, а считывает его в один проход элемент за элементом. Переход к следующему элементу осуществляется вызовом метода Read().

20. Теперь нужно создать процедуру сохранения данных текущего дня в файл. Эта процедура должна запускаться при переходе от одной даты к другой, а также в момент закрытия приложения. Ее код приведен в листинге 6.9.

Листинг 6.9

Private 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

Перейти на страницу:

Похожие книги