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

ЖАНРЫ

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

Салмре Иво

Шрифт:

LoadHelper_NewElementEncountered(nodeName, ref currentReadLocation);

break;

}

//----------------------------------------------------

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

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

//----------------------------------------------------

case System.Xml.XmlNodeType.Text: {

switch (currentReadLocation) {

case ReadLocation.inFirstName: {

firstName = xmlReader.Value;

break;

}

case ReadLocation.inLastName: {

lastName = xmlReader.Value;

break;

}

case ReadLocation.inUserID: {

userId = System.Convert.ToInt32(xmlReader.Value);

break;

}

}

break;

}

//-------------------------------------------------------------

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

//элемента

//

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

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

//вернуться назад к его предку

//-------------------------------------------------------------

case System.Xml.XmlNodeType.EndElement: {

bool continueParsing;

continueParsing = LoadHelper_EndElementEncountered(ref currentReadLocation);

if (continueParsing ==false) {

goto finished_reading_wanted_data;

}

break;

}

default: {

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

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

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

System.Windows.Forms.MessageBox.Show("Встретился непредвиденный XML-тип " + xmlReader.Name);

break;

}

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

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

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

readSuccess = xmlReader.Read;

}

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

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

//мы считываем, что-то не так

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

finished_reading_wanted_data:

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

xmlReader.Close;

 }

 //--------------------------------------------------------

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

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

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

 //--------------------------------------------------------

 private static bool LoadHelper_EndElementEncountered(ref ReadLocation currentReadLocation) {

switch (currentReadLocation) {

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

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

case ReadLocation.inName: {

currentReadLocation = ReadLocation.inUserInfo;

break;

}

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

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

case ReadLocation.inFirstName: {

currentReadLocation = ReadLocation.inName;

break;

}

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

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

case ReadLocation.inLastName: {

currentReadLocation = ReadLocation.inName;

break;

}

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

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

case ReadLocation.inUserID: {

currentReadLocation = ReadLocation.inUserInfo;

break;

}

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

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

//и LastName.

//

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

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

case ReadLocation.inUserInfo: {

return false; //Анализ должен быть прекращен

}

}

return true; //Продолжить анализ

 }

 private static void LoadHelper_NewElementEncountered(string nodeName,ref ReadLocation currentReadLocation) {

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