Чтение онлайн

на главную - закладки

Жанры

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

Ватсон Карли

Шрифт:

 doc.Load("..\\..\\..\\books.xml");

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

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

 // задать некоторые атрибуты

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

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

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

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

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

 newTitle.InnerText="Case of the Missing cookie";

 newBook.AppendChild(newTitle);

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

 XmlElement newAuthor=doc.CreateElement("author");

 newBook.AppendChild(newAuthor);

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

 XmlElement newName=doc.CreateElement("name");

 newName.InnerText="С. Monster";

 newAuthor.AppendChild(newName);

 // создать новый элемент 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");

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

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Охота на разведенку

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
6.76
рейтинг книги
Охота на разведенку

Неудержимый. Книга XVI

Боярский Андрей
16. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVI

Газлайтер. Том 18

Володин Григорий Григорьевич
18. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 18

Ищу жену для своего мужа

Кат Зозо
Любовные романы:
любовно-фантастические романы
6.17
рейтинг книги
Ищу жену для своего мужа

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

По воле короля

Леви Кира
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
По воле короля

Черный Маг Императора 9

Герда Александр
9. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 9

Последняя Арена 8

Греков Сергей
8. Последняя Арена
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Последняя Арена 8

Измена. Вторая жена мужа

Караева Алсу
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Вторая жена мужа

Возмездие

Злобин Михаил
4. О чем молчат могилы
Фантастика:
фэнтези
7.47
рейтинг книги
Возмездие

Выстрел на Большой Морской

Свечин Николай
4. Сыщик Его Величества
Детективы:
исторические детективы
полицейские детективы
8.64
рейтинг книги
Выстрел на Большой Морской

Ты - наша

Зайцева Мария
1. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Ты - наша

Повелитель механического легиона. Том III

Лисицин Евгений
3. Повелитель механического легиона
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Повелитель механического легиона. Том III