C# для профессионалов. Том II | страница 17



>XmlElement newTitle=doc.CreateElement("title");

>newTitle.InnerText="Case of the Missing Cookie";

>newBook.AppendChild(newTitle);

Здесь снова создается новый объект на основе >XmlElement (newTitle). Присваиваем свойству >InnerText заголовок новой книги и добавляем потомок к элементу >book. Затем это повторяется для остальных элементов >book. Отметим, что элемент >name добавлен как потомок элемента >author. Это дает нам правильное отношение вложенности.

Наконец, мы добавляем элемент >newBook к узлу >doc.DocumentElement. Это тот же уровень, что и у всех других элементов >book. Мы заменили существующий документ новым, в отличие от >XmlWriter, где можно было только создать новый документ. Последнее, что нужно сделать, это записать новый документ XML на диск. В этом примере мы создаем новый >XmlTextWriter и передаем его в метод >WriteContentTo. Не забудьте вызвать метод >Close на >XmlTextWriter, чтобы сбросить содержимое внутренних буферов и закрыть файл. Методы >WriteContentTo и >WriteTo получают >XmlTextWriter в качестве параметра. >WriteContentTo сохраняет текущий узел и всех потомков в >XmlTextWriter, в то время как >WriteTo сохраняет текущий узел. Так как >doc является объектом на основе >XmlDocument, он представляет весь документ и поэтому будет сохранен. Можно было бы также использовать метод >Save. Он всегда будет сохранять весь документ. >Save имеет четыре перегружаемые версии. Можно определить строку с именем файла и путем доступа, объект на основе класса >Stream, объект на основе класса >TextWriter, или объект на основе >XmlWriter. Именно это было использовано при выполнении примера. Отметим новую запись в конце списка:

Если нужно создать документ с самого начала, можно использовать класс >XmlTextWriter. Можно также использовать >XmlDocument. Какой из них выбрать? Если данные, которые желательно поместить в XML, доступны и готовы для записи, то самым подходящий будет класс >XmlTextWriter. Однако, если необходимо создавать документ XML постепенно, вставляя узлы в различные места, то наиболее приемлемым будет применение >XmlDocument. Вот тот же пример, который только что был рассмотрен, но вместо редактирования текущего документа мы создаем новый документ (>DOMSample4):

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

> // создать раздел объявлений

> XmlDeclaration newDoc=doc.CreateXmlDeclaration("1.0", null, null);

> doc.AppendChild(newDoc);

> // создать новый корневой элемент

> XmlElement newRoot=doc.CreateElement("newBookstore");