Книга: C# для профессионалов. Том II

Запись XML

Запись XML

Класс XmlTextWriter позволяет записывать XML в поток, файл или объект TextWriter. Подобно XmlTextReader он делает это только вперед, некэшируемым образом. XmlTextWriter можно конфигурировать различным образом, что позволяет определить такие вещи, как наличие или отсутствие отступов, величину отступа, какой использовать символ кавычки в значениях атрибутов, и поддерживаются ли пространства имен. Свойство DataTypeNamespace определяет, как строго значения типов преобразуются в текст XML. Для этого свойства допустимо значение urn:schemas-microsoft-com:datatypes, которое поддерживает типы данных XDR, и другое значение www.w3.org/1999/XMLSchema-data-types, которое является схемой W3C типов данных XSD. Чтобы использовать, например, тип данных TimeSpan, необходимо будет задать это свойство для типов данных XSD.

Приведем простой пример, чтобы увидеть, как может использоваться класс TextWriter(пример находится в папке XMLWriterSample1):

private void button1_Click(object sender, System.EventArgs e) {
 // измените в соответствии с используемой структурой путей доступа
 string fileName="......booknew.xml";
 //создайте XmlTextWriter
 XmlTextWriter tw=new XmlTextWriter(fileName, null);
 // задайте форматирование с отступом
 tw.Formatting=Formatting.Indented;
 tw.WriteStartDocument();
 //Начать создание элементов и атрибутов
 tw.WriteStartElement("book");
 tw.WriteAttributeString("genre", "Mystery");
 tw.WriteAttributeString("publicationdate", "2001");
 tw.WriteAttributeString("ISBN", "123456789");
 tw.WriteElementString("title", "Case of the Missing Cookie");
 tw.WriteStartElement("author");
 tw.WriteElementString("name", "Cookie Monster");
 tw.WriteEndElement();
 tw.WriteElementString("price", "9.99");
 tw.WriteEndElement();
 tw.WriteEndDocument();
 // очистить
 tw.Flush();
 tw.Close();
}

Создадим новый файл booknew.xml и добавим новую книгу. Объект XmlTextWriter заменит существующий файл. Вставку нового элемента или узла в существующий документ рассмотрим позже. Экземпляр объекта XmlTextWriter создается с помощью объекта FileStream в качестве параметра. Можно также передать строку с именем файла и путем доступа или объект на основе TextWriter. При задании свойства Indenting узлы-потомки будут автоматически делать отступ от предка. Метод WriteStartDocument() помещает объявление документа. Начинаем запись данных. Сначала идет элемент book. Затем добавляем атрибуты genre, publicationdate и ISBN. После чего записываем элементы title, author, и price. Отметим, что элемент author имеет элемент-потомок name.

После нажатия на кнопку будет создан следующий файл booknew.xml:

<?xml version="1 .0"?>
<book genre= "Mystery" publicationdate="2001" ISBN="123456789">
 <title>Case of the Missing Cookie</title>
 <author>
  <name>Cookie Monster</name>
 </author>
 <price>9,99</price>
</book>

Так же как в документе XML, здесь имеются начальный метод и конечный метод (WriteStartElement и WriteEndElement). Вложенность контролируется отслеживанием начала и окончания записи элементов и атрибутов. Это можно видеть при добавлении элемента потомка name к элементу authors. Отметим, как организуются вызовы методов WriteStartElement и WriteEndElement и как это связывается с выведенным документом XML.

В дополнение к WriteElementString и WriteAtributeString имеется несколько других специализированных методов записи. Метод WriteCDate будет выводить раздел CDate (<!CDATE[...]]>), взяв текст для записи из параметра. WriteComment записывает комментарий в подходящем формате XML. WriteChars записывает содержимое символьного буфера. Это работает аналогично методу ReadChars, который был рассмотрен ранее. Оба они используют один и тот же тип параметров. Методу WriteChar нужен буфер (массив символов), начальная позиция для записи (целое значение) и число символов для записи (целое значение).

Чтение и запись XML с помощью классов, основанных на XMLReader и XMLWriter, осуществляются очень просто. Далее мы рассмотрим реализацию DOM пространства имен System.Xml. Это классы на основе XmlDocument и XmlNode.

Оглавление книги

Оглавление статьи/книги

Генерация: 1.185. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз