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");