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

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

Жанры

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

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

Имя нам Легион. Том 8

Дорничев Дмитрий
8. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 8

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Убивать чтобы жить 5

Бор Жорж
5. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 5

Санек 2

Седой Василий
2. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 2

Семь Нагибов на версту

Машуков Тимур
1. Семь, загибов на версту
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Семь Нагибов на версту

Мое ускорение

Иванов Дмитрий
5. Девяностые
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Мое ускорение

Хозяин Теней 7

Петров Максим Николаевич
7. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 7

Князь Андер Арес 3

Грехов Тимофей
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Князь Андер Арес 3

Моров. Том 1 и Том 2

Кощеев Владимир
1. Моров
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Моров. Том 1 и Том 2

Сильнейший Столп Империи. Книга 2

Ермоленков Алексей
2. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 2

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Графиня с изъяном. Тайна живой стали

Лин Айлин
Фантастика:
фэнтези
героическая фантастика
киберпанк
5.00
рейтинг книги
Графиня с изъяном. Тайна живой стали