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

ЖАНРЫ

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

Салмре Иво

Шрифт:

 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 анализатором

'Перейти к следующему узлу

readSuccess = xmlReader.Read

 End While

 'Если
мы оказались в этом месте программы, не покинув

 'XML-дескриптора UserInfo, то с XML-данными, которые мы считываем,

 'что-то не так

 Throw New Exception("He найден элемент UserInfo в XML-документе!")

finished reading_wanted_data:

 'Закрыть файл, поскольку работа с ним закончена!

 xmlReader.Close

End Sub

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

'Вспомогательный код, ответственный за принятие решения

'относительно того, в какое состояние необходимо перейти,

'когда встречается закрывающий дескриптор

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

Private Shared Function LoadHelper_EndElementEncountered( _

 ByRef currentReadLocation As ReadLocation) As Boolean

 Select Case (currentReadLocation)

 'Если мы покидаем узел Name, то должны вернуться

 'обратно в узел UserInfo

 Case ReadLocation.inName

currentReadLocation = ReadLocation.inUserInfo

 'Если мы покидаем узел FirstName, то должны вернуться

 'обратно в узел Name

 Case ReadLocation.inFirstName

currentReadLocation = ReadLocation.inName

 'Если мы покидаем узел LastName, то должны вернуться

 'обратно в узел Name

Case ReadLocation.inLastName

currentReadLocation = ReadLocation.inName

 'Если мы покидаем узел UserID, то должны вернуться

 'обратно в узел UserInfo

 Case ReadLocation.inUserID

currentReadLocation = ReadLocation.inUserInfo

 'Если мы покидаем узел UserInfo, то мы только что

 'закончили чтение данных в узлах UserID, FirstName

 'и LastName

 '

 'Можно выйти из цикла, поскольку у нас уже есть вся

 'информация, которую мы хотели получить!

 Case ReadLocation.inUserInfo

Return False 'Анализ должен быть прекращен

 End Select

 Return True

 'Продолжить анализ

End Function

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