Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сериализация, XML.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
928.26 Кб
Скачать

Последовательный доступ к xml документу

Последовательный доступ к XML документам позволяет читать и записывать их наиболее эффективно. Недостатками использования этого подхода являются то, что во-первых доступ осуществляется линейно, а во-вторых во время работы с документом файл остаётся открытым.

Класс XmlTextWriter

Класс XmlTextWriter предоставляет средство для быстрой прямой записи XML данных.

Создаётся экземпляр класса XmlTextWriter для записи в файл "books.xml". Задаётся форматирование с отступом. Отступ задаётся равный трём символам. Записывается объявление XML. Записывается комментарий содержащий информацию о том когда документ был создан. Записывается открывающий тег <books>. Записывается открывающий тег <book>. Записываются элементы содержащие текст <title> и <author>. Записывается открывающий тег <price>. Записывается атрибут этого тега format равный "dollars". Записывается текст. Записывается закрывающий тег </price>. Записывается открывающий тег <pubinfo>. Записываются элементы содержащие текст <publisher> и <pubdate>. Записывается закрывающий тег </pubinfo>. Записывается закрывающий тег </book>. Записывается закрывающий тег </books>. Последние три закрывающих тега можно было записать одним вызовом WriteEndDocument. Закрывается экземпляр класса XmlTextWriter. При его закрытии закрывается файл.

static void Main()

{

XmlTextWriter writer = new XmlTextWriter("books.xml", null);

writer.Formatting = Formatting.Indented;

writer.Indentation = 3;

writer.WriteStartDocument();

writer.WriteComment("Создан: " + DateTime.Now.ToString());

writer.WriteStartElement("books");

writer.WriteStartElement("book");

writer.WriteElementString("title", "CLR via C#");

writer.WriteElementString("author", "Jeffrey Richter");

writer.WriteStartElement("price");

writer.WriteAttributeString("format", "dollars");

writer.WriteString("59.99");

writer.WriteEndElement();

writer.WriteStartElement("pubinfo");

writer.WriteElementString("publisher", "Microsoft Press");

writer.WriteElementString("pubdate", "22/03/2006");

writer.WriteEndElement();

writer.WriteEndElement();

writer.WriteEndElement();

writer.Close();

}

Класс XmlTextReader

Класс XmlTextReader предоставляет средство для быстрого прямого чтения XML данных.

Функция работает последовательно. Она по очереди используя метод Read обходит все узлы и обрабатывает их. Для каждого узла определяется тип. В зависимости от типа узла получается разная информация об узле. Информация записывается в изменяемую строку символов. После определения типа узла и получения информации об узле проверяется есть ли у узла атрибуты. Если у узла есть атрибуты то информация о каждом из них записывается в изменяемую строку. Обход всех атрибутов осуществляется последовательно с помощью функции MoveToNextAttribute. В конце получившаяся изменяемая строка выводится на экран.

static void Main()

{

XmlTextReader reader = new XmlTextReader("books.xml");

StringBuilder str = new StringBuilder();

while (reader.Read())

{

switch (reader.NodeType)

{

case XmlNodeType.XmlDeclaration:

str.AppendFormat("Объявление XML : {0} {1} \n", reader.Name,reader.Value);

break;

case XmlNodeType.Element:

str.AppendFormat("Элемент: {0} \n",reader.Name); break;

case XmlNodeType.Text:

str.AppendFormat(" Значение: {0} \n",reader.Value); break;

case XmlNodeType.Comment:

str.AppendFormat("Комментарий: {0} \n“,reader.Value); break;

...

}

if (reader.AttributeCount > 0)

{

while (reader.MoveToNextAttribute())

str.AppendFormat(" Атрибут: {0} Значение: {1} \n",reader.Name, reader.Value);

}

reader.Close();

Console.WriteLine(str);

}

}