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.
Объектная модель документа в .NET
Реализация объектной модели документа (DOM, Document Object Model) в .NET поддерживает спецификации W3C DOM Level 1 и Core DOM Level 2. DOM реализуется с помощью класса XmlNode. XmlNode является абстрактным классом, который представляет узел документа XML. XmlNodeList является упорядоченным списком узлов. Это живой список узлов, и любые изменения в любом узле немедленно отражаются в списке. XmlNodeList поддерживает индексный доступ или итеративный доступ. Эти два класса составляют основу реализации DOM на платформе .NET. Вот список классов, которые основываются на XmlNode.
| Имя класса | Описание |
|---|---|
XmlLinkedNode | Расширяет XmlNode. Возвращает узел непосредственно перед или после текущего узла. Добавляет свойства NextSibling и PreviousSibling в XmlNode. |
XmlDocument | Расширяет XmlNode. Представляет весь документ. Реализует спецификации DOM Level 1 и Level 2. |
XmlAttribute | Расширяет XmlNode. Объект атрибута объекта XmlElement. |
XmlCDataSection | Расширяет XmlCharacterData. Объект, который представляет раздел документа CData. |
XmlCharacterData | Абстрактный класс, который предоставляет методы манипуляции с текстом для других классов. Расширяет XmlLinkedNode. |
XmlComment | Расширяет XmlCharacterData. Представляет объект комментария XML. |
XmlDeclaration | Расширяет XmlLinkedNode. Представляет узел объявления (<?xml version='1.0' ...>) |
