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

ЖАНРЫ

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

Салмре Иво

Шрифт:

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

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

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

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

System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument;

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

//Добавить элемент документа высшего
уровня

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

System.Xml.XmlElement rootNodeForDocument;

rootNodeForDocument = xmlDocument.CreateElement(XML_ROOT_TAG);

xmlDocument.AppendChild(rootNodeForDocument);

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

//Добавить данные в элемент UserInfo

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

System.Xml.XmlElement topNodeForUserData;

topNodeForUserData = xmlDocument.CreateElement(XML_USERINFO_TAG);

rootNodeForDocument.AppendChild(topNodeForUserData);

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

//Добавить значение UserID в наш документ

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

//Создать подузел для информации о пространстве имен

System.Xml.XmlElement subNodeForUserID;

subNodeForUserID = xmlDocument.CreateElement(XML_USERID_TAG);

subNodeForUserID.InnerText = System.Convert.ToString(userId);

//Присоединить подузел UserID к узлу высшего уровня

topNodeForUserData.AppendChild(subNodeForUserID);

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

//Добавить все значения NameInfo в наш документ

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

//Создать подузел для информации о пространстве имен

System.Xml.XmlElement subNodeForNameInfo;

subNodeForNameInfo = xmlDocument.CreateElement(XML_NAMEINFO_TAG);

//Имя (FirstName)

System.Xml.XmlElement subNodeFirstName;

subNodeFirstName = xmlDocument.CreateElement(XML_FIRSTNAME_TAG);

subNodeFirstName.InnerText = firstName;

//Фамилия (LastName)

System.Xml.XmlElement subNodeLastName;

subNodeLastName = xmlDocument.CreateElement(XML_LASTNAME_TAG);

subNodeLastName.InnerText = lastName;

//Присоединить подузлы имени и фамилии к родительскому

//узлу NameInfo

subNodeForNameInfo.AppendChild(subNodeFirstName);

subNodeForNameInfo.AppendChild(subNodeLastName);

//Присоединить подузел NameInfo (вместе с его дочерними узлами)

//к узлу
высшего уровня

topNodeForUserData.AppendChild(subNodeForNameInfo);

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

//Сохранить документ

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

try {

xmlDocument.Save(fileName);

}

catch (System.Exception ex) {

System.Windows.Forms.MessageBox.Show("Ошибка при сохранении XML-документа - " + ex.Message);

}

 } //Конец функции

} //Конец класса

Листинг 10.2. Вызов кода, предназначенного для сохранения и загрузки XML-документа

private void button1_Click{object sender, System.EventArgs e) {

 const string FILENAME = "TestFileName.XML";

 //Сохранить, используя XML DOM

 SaveAndLoadXML UseDOM.XML_SaveUserInfo(FILENAME, 14, "Ivo", "Salmre");

 //Сохранить, используя объект однонаправленной записи XMLWriter

 //SaveAndLoadXML_UseReaderWriter.XML SaveUserInfo(FILENAME,

 // 18, "Ivo", "Salmre");

 int userID;

 string firstName;

 string lastName;

 //Загрузить, используя XML DOM

 SaveAndLoadXML_UseDOM.XML_LoadUserInfo(FILENAME, out userID, out firstName, out lastName);

 //Загрузить, используя объект однонаправленного чтения XMLReader

 //SaveAndLoadXML_UseReaderWriter.XMILoadUserInfo(FILENAME,

 // out userID, out firstName, out lastName);

 System.Windows.Forms.MessageBox.Show('Готово!" + userID.ToString + ", " + lastName + ", " + firstName);

}
 

Модель однонаправленного чтения-записи XML-данных

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

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