userId = 0

 firstName = ""

 lastName = ""

 'Предполагаем, что данные еще не загружены

 Dim gotUserInfoData As Boolean = False

 Dim xmlDocument As System.Xml.XmlDocument = _

  New System.Xml.XmlDocument

 xmlDocument.Load(fileName)

 'Получить корневой узел

 Dim rootElement As System.Xml.XmlElement

 rootElement = _

  CType(xmlDocument.ChildNodes(0), System.Xml.XmlElement)

 'Убедиться в том, что корневой узел согласуется с ожидаемым текстом,

 'ибо противное означает, что мы имеем дело с каким-то другим 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: Фамилия пользователя, которую мы хотим сохранить

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

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