Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:

'<Root><UserInfo>

xmlTextWriter.WriteStartElement(XML_USERID_TAG)

'<Root><UserInfo><UserID>

'Запись значения

xmlTextWriter.WriteString(userId.ToString)

xmlTextWriter.WriteEndElement 'Закрыть дескриптор UserID

'<Root><UserInfo>

xmlTextWriter.WriteEndElement

'Закрыть дескриптор UserInfo

'<Root>

xmlTextWriter.WriteEndElement 'Закрыть дескриптор документа

xmlTextWriter.Close

End Sub

'--------------------------------------------------------------

'Загружает пользовательское состояние

' [in] fileName: Имя файла, используемого для сохранения данных

' [out] userId: Загруженный идентификатор пользователя

' [out] firstName: Загруженное имя пользователя

' [out] lastName: Загруженная фамилия пользователя

'--------------------------------------------------------------

Public Shared Sub XML_LoadUserInfo(ByVal fileName As String, _

ByRef userId As Integer, ByRef firstName As String, _

ByRef lastName As String)

Dim currentReadLocation As ReadLocation

'Начинаем с нулевых значении

userId = 0

firstName = ""

lastName = ""

Dim xmlReader As System.Xml.XmlTextReader = _

New System.Xml.XmlTextReader(fileName)

xmlReader.WhitespaceHandling = _

System.Xml.WhitespaceHandling.None

Dim readSuccess As Boolean

readSuccess = xmlReader.Read

If (readSuccess = False) Then

Throw New System.Exception("Отсутствуют XML-данные для чтения!")

End If

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

If (xmlReader.Name <> XML_ROOT_TAG) Then

Throw New System.Exception( _

"Корневой дескриптор отличается от ожидаемого!")

End If

'Отметить текущее местоположение в документе

currentReadLocation = ReadLocation.inAllMyData

'------------------------------------------------------

'Цикл прохождения документа и чтение необходимых данных

'------------------------------------------------------

While (readSuccess)

Select Case (xmlReader.NodeType)

'Вызывается при входе в новый элемент

Case System.Xml.XmlNodeType.Element

Dim nodeName As String = xmlReader.Name

LoadHelper_NewElementEncountered(nodeName, _

currentReadLocation)

'--------------------------------------------------

'Здесь мы можем извлечь некоторый фактический текст

'и получить данные, которые пытаемся загрузить

'--------------------------------------------------

Case System.Xml.XmlNodeType.Text

Select Case currentReadLocation

Case ReadLocation.inFirstName

firstName = xmlReader.Value

Case ReadLocation.inLastName

lastName = xmlReader.Value

Case ReadLocation.inUserID

userId = CInt(xmlReader.Value)

End Select

'Конец оператора Case "System.Xml.XmlNodeType.Text"

'----------------------------------------------------

'Вызывается, когда встречается конец

'элемента

'

'Мы можем захотеть переключить состояние в зависимости

'от вида покидаемого узла, чтобы указать на то, что

'собираемся вернуться назад к его предку

'-----------------------------------------------------

Case System.Xml.XmlNodeType.EndElement

Dim continueParsing As Boolean

continueParsing = LoadHelper_EndElementEncountered( _

currentReadLocation)

If (continueParsing = False) Then

GoTo finished_reading_wanted_data

End If

Case Else

'He страшно, если имеются XML-узлы других типов, но

'в нашем примере работы с XML-документом мы должны

'оповестить об этом факте

MsgBox( _

"Встретился непредвиденный XML-тип " + xmlReader.Name)

End Select 'Конец оператора Case, используемого для определения текущего

'типа XML-элeмeнтa, oбpaбaтывaeмoгo анализатором

Поделиться с друзьями: