'ибо противное означает, что мы имеем дело с каким-то другим XML-файлом
If (rootElement.Name <> XML_ROOT_TAG) Then
Throw New Exception("Тип корневого узла не совпадает с ожидаемым!")
End If
'-----------------------------------------------------------
'Простой конечный автомат для итеративного обхода всех узлов
'-----------------------------------------------------------
Dim childOf_RootNode As System.Xml.XmlElement
For Each childOf_RootNode In _
rootElement.ChildNodes
'Если это узел UserInfo, то мы хотим просмотреть его содержимое
If (childOf_RootNode.Name = XML_USERINFO_TAG) Then
gotUserInfoData = True
'Пользовательские данные найдены
'--------------------------------
'Загрузить каждый из подэлементов
'--------------------------------
Dim child_UserDataNode As System.Xml.XmlElement
For Each child_UserDataNode In _
childOf_RootNode.ChildNodes
'Идентификатор пользователя (UserID)
If (child_UserDataNode.Name = XML_USERID_TAG) Then
userId = CInt(child_UserDataNode.InnerText)
'ФИО пользователя (UserName)
ElseIf (child_UserDataNode.Name = XML_NAMEINFO_TAG) Then
Dim child_Name As System.Xml.XmlElement
For Each child_Name In child_UserDataNode.ChildNodes
'Имя (FirstName)
If (child_Name.Name = XML_FIRSTNAME_TAG) Then
firstName = child_Name.InnerText
'Фамилия (LastName)
ElseIf (chi1d_Name.Name = XML_LASTNAME_TAG) Then
lastName = child_Name.InnerText
End If
Next 'Конец цикла разбора UserName
End If 'Конец оператора if, осуществляющего проверку UserName
Next 'Конец цикла разбора UserInfo
End If 'Конец оператора if, осуществляющего проверку UserInfo
Next 'Конец цикла разбора корневого узла
If (gotUserInfoData = False) Then
Throw New Exception("Данные пользователя в XML-документе не найдены!")
End If
End Sub
'--------------------------------------------------------------------
'Сохраняет пользовательское состояние
' [in] fileName: Имя файла, используемого для сохранения данных
' [in] userId: Идентификатор пользователя, который мы хотим сохранить
' [in] firstName: Имя пользователя, которое мы хотим сохранить
' [in] lastName: Фамилия пользователя, которую мы хотим сохранить
'--------------------------------------------------------------------
Public Shared Sub XML_SaveUserInfo(ByVal fileName As String, _
ByVal userId As Integer, ByVal firstName As String, _
ByVal lastName As String)
Dim xmlDocument As System.Xml.XmlDocument = _
New System.Xml.XmlDocument
'-----------------------------------------
'Добавить элемент документа высшего уровня
'-----------------------------------------
Dim rootNodeForDocument As System.Xml.XmlElement
rootNodeForDocument = xmlDocument.CreateElement( _
XML_ROO T_TAG)
xmlDocument.AppendChild(rootNodeForDocument)
'----------------------------------
'Добавить данные в элемент UserInfo
'----------------------------------
Dim topNodeForUserData As System.Xml.XmlElement
topNodeForUserData = xmlDocument.CreateElement( _
XML_USERINFO_TAG)
rootNodeForDocument.AppendChild(topNodeForUserData)
'---------------------------------------
'Добавить значение UserID в наш документ
'---------------------------------------
'Создать подузел для информации о пространстве имен
Dim subNodeForUserID As System.Xml.XmlElement
subNodeForUserID = _
xmlDocument.CreateElement(XML_USERID_TAG)
subNodeForUserID.InnerText = _
System.Convert.ToString(userId)
'Присоединить подузел UserID к узлу высшего уровня
topNodeForUserData.AppendChild(subNodeForUserID)
'---------------------------------------------
'Добавить все значения NameInfo в наш документ
'---------------------------------------------
'Создать подузел для информации о пространстве имен
Dim subNodeForNameInfo As System.Xml.XmlElement
subNodeForNameInfo = xmlDocument.CreateElement( _
XML_NAMEINFO_TAG)
'Имя (FirstName)
Dim subNodeFirstName As System.Xml.XmlElement
subNodeFirstName = xmlDocument.CreateElement( _
XML_FIRSTNAME TAG)
subNodeFirstName.InnerText = firstName
'Фамилия (LastName)
Dim subNodeLastName As System.Xml.XmlElement
subNodeLastName = xmlDocument.CreateElement( _
XML_LASTNAME_TAG)
subNodeLastName.InnerText = lastName
'Присоединить подузлы имени и фамилии к родительскому узлу
'NameInfo
subNodeForNameInfo.AppendChild(subNodeFirstName)
subNodeForNameInfo.AppendChild(subNodeLastName)
'Присоединить подузел NameInfo (вместе с его дочерними узлами)
'к узлу высшего уровня
topNodeForUserData.AppendChild(subNodeForNameInfo)
'------------------
'Сохранить документ
'------------------
Try
xmlDocument.Save(fileName)
Catch ex As System.Exception
MsgBox( _
"Ошибка при сохранении XML-документа - " + ex.Message)
End Try
End Sub 'Конец функции
End Class 'Конец класса
Листинг 10.2. Вызов кода, предназначенного для сохранения и загрузки XML-документаPrivate Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Const FILENAME As String = "TestFileName.XML"
'Сохранить, используя XML DOM
SaveAndLoadXML_UseDOM.XML_SaveUserInfo(FILENAME, 14, "Ivo", _
"Salmre")
'Сохранить, используя объект однонаправленной записи XMLWriter