Программирование мобильных устройств на платформе .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
Поделиться с друзьями: