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

ЖАНРЫ

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

Ниже приведен простой код, предназначенный для чтения и записи представленных ранее данных с использованием модели однонаправленной обработки XML- документов с помощью объектов XMLReader и XMLWriter. Особый интерес для вас может представлять конечный автомат, используемый в объекте XMLReader для отслеживания текущего места в документе; заметьте, что даже для столь простого XML-документа, как наш, этот код вовсе не тривиален. В противоположность этому код, предназначенный для вывода XML-документов при помощи объекта XMLWriter, отличается простотой.

Листинг 10.3. Использование однонаправленного чтения-записи XML-данных для загрузки XML-документа из файла и его сохранения

using System;

public class SaveAndLoadXML UseReaderWriter {

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

const string XML_ROOT_TAG = "AllMyData";

const string XML_USERINFO_TAG = "UserInfo";

const string XMI_USERID_TAG = "UserID";

const string XML_NAMEINFO_TAG = "Name";

const string XML_FIRSTNAME_TAG = "FirstName";

const string XML_LASTNAME TAG = "LastName";

//Набор состояний, отслеживаемых по мере чтения данных

private enum ReadLocation {

inAllMyData,

inUserInfo,

inUserID,

inName,

inFirstName,

inLastName,

}

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

//Сохраняет пользовательское состояние

//

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

// [in] userId: Идентификатор пользователя, который мы хотим сохранить

// [in] firstName: Имя пользователя, которое мы хотим сохранить

// [in] lastName: Фамилия пользователя, которую мы хотим сохранить

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

public static void XML_SaveUserInfo(string fileName, int userId,string firstName, string lastName) {

System.Xml.XmlTextWriter xmlTextWriter;

xmlTextWriter =new System.Xml.XmlTextWriter(fileName, System.Text.Encoding.Default);

//Записать содержимое документа!

//<Root>

xmlTextWriter.WriteStartElement(XML_ROOT_TAG);

//<Root>

xmlTextWriter.WriteStartElement(XML_USERINFO_TAG);

//<Root><UserID>

//<Root><UserInfo>

xmlTextWriter.WriteStartElement(XML_NAMEINFO_TAG);

//<Root><UserInfo><Name>

xmlTextWriter.WriteStartElement(XML_FIRSTNAME_TAG);

//<Root><UserInfo><Name><FirstName>

xmlTextWriter.WriteString(firstName); //Запись значения

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

//<Root><UserInfo><Name>

xmlTextWriter.WriteStartElement(XML_LASTNAME_TAG);

//<Root><UserInfo><Name><LastName>

xmlTextWriter.WriteString(lastName); //Запись значения

xmlTextWriter.WriteEndElement; //Закрыть дескриптор фамилии

//<Root><UserInfo><Name>

xmlTextWriter.WriteEndElement; //Закрыть дескриптор ФИО

//<Root><UserInfo>

//<Root><UserInfo>

xmlTextWriter.WriteStartElement(XML_USERID_TAG);

//<Root><UserInfo><UserID>

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

xmlTextWriter.WriteString(userId.ToString);

xmlTextWriter.WriteEndElement;

//Закрыть дескриптор UserID

//<Root><Userlnfo>

xmlTextWriter.WriteEndElement; //Закрыть дескриптор UserInfo

//<Root>

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

//

xmlTextWriter.Close;

}

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

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

//

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

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

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

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

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

public static void XML_LoadUserInfo(string fileName, out int userId, out string firstName,out string lastName) {

ReadLocation currentReadLocation;

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

userId = 0;

firstName = "";

lastName = "";

System.Xml.XmlTextReader xmlReader = new System.Xml.XmlTextReader(fileName);

xmlReader.WhitespaceHandling = System.Xml.WhitespaceHandling.None;

bool readSuccess;

readSuccess = xmlReader.Read;

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