Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

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

 XmlElement newPrice=doc.CreateElement("price");

 newPrice.innerText="9.95";

 newBook.AppendChild(newPrice);

 // добавить к текущему документу

 doc.DocumenElement.AppendChild(newBook);

 // записать doc на диск

 XmlTextWriter tr=new XmlTextWriter("..\\..\\..\\booksEdit.xml", null);

 tr.Formatting=Formatting.Indented;

 doc.WriteContentTo(tr);

 tr.Close;

 // загрузить listBox1 со всеми заголовками, включая новый

 XmlNodeList nodeLst=doc.GetElementsByTagName("title");

 foreach(XmlNode node in nodeLst) listBox1.Items.Add(node.InnerText);

}

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

 string srch="bookstore/book[title='" + listBox1.SelectedItem.ToString + "']";

 XmlNode foundNode=doc.SelectSingleNode(srch);

 if (foundNode!=null) MessageBox.Show(foundNode.InnerText);

 else MessageBox.Show("Not found");

}

При выполнении этого кода будет получена функциональность предыдущего примера, но в окне списка появилась одна дополнительная книга "The Case of Missing Cookie". Щелчок мыши на заголовке этой книги приведет к выводу такой же информации, как и для других книг. Анализируя код, можно увидеть, что это достаточно простой процесс. Прежде всего создается новый элемент

book
:

XmlElement newBook = doc.CreateElement("book);

Метод

CreateElement
имеет три перегружаемые версии, которые позволяют определить имя элемента, имя и пространство имен URI, и, наконец,
prefix
(префикс),
lоcalname
(локальное имя) и
namespace
(пространство имен). Когда элемент создан, необходимо добавить атрибуты

newBook.setAttribute("genre", "Mystery");

newBook.SetAttribute("publicationdate", "2001");

newBook.SetAttribute("ISBN", "123456789");

Напомним, что класс

XmlAttribute
расширяет класс
XmlNode
, поэтому нам доступны все свойства и методы
XmlNode
. Даже если имеется очень сложная структура, то при ее размещении никаких проблем возникать не должно.

Теперь, когда атрибуты созданы и необходимо добавить другие элементы книги:

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

 doc.AppendChild(newRoot);

 // создать новый элемент 'book'

 XmlElement newBook=doc.CreateElement("book");

  • Читать дальше
  • 1
  • ...
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: