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

Ватсон Карли

Шрифт:

}

Обратите внимание, что мы добавили следующее объявление на уровне модуля:

private XmlDocument doc=new XmlDocument;

Если бы это было все, что нужно делать, то использование

XmlReader
было бы значительно более эффективным способом загрузки окна списка. Причина в том, что мы прошли через документ один раз и затем закончили с ним работу. Однако, если желательно повторно посетить узел, то использование
XmlDocument
является лучшим для этого способом. Слегка расширим пример (новая версия находится в
DOMSample2
):

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

 //doc объявлен на уровне модуля

 // измените путь доступа в соответствии со структурой путей доступа

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

 // получить только те узлы, которые хотим XmlNodeList

 nodeLst=doc.GetElementsByTagName("title");

 // итерации через список XmlNodeList

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

}

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

 // создать строку поиска XPath

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

}

В этом примере

listbox
с заголовками загружается из документа
books.xml
. Когда мы щелкаем на окне списка, вызывая порождение события
SelectedIndexChange
(не забудьте добавить код, присоединяющий обработчик событий в функцию
InitializeComponent
), мы берем текст выбранного пункта в
listbox
, в данном случае заголовок книги, создаем оператор XPath и передаем его в метод
SelectSingleNode
объекта
doc
. Он возвращает элемент
book
, частью которого является title (foundNode). Выведем для наглядности InnerText узла в окне сообщения. Мы можем продолжать щелкать на элементах в
listbox
сколько угодно раз, так как документ загружен и остается загруженным, пока мы его не освободим.

Небольшой комментарий в отношении метода

SelectSingleNode
. Это реализация
XPath
в классе
XmlDocument
. Существуют методы
SelectSingleNode
и
SelectNodes
. Оба они определены в
XmlNode
, на котором основывается
XmlDocument
.
SelectSingleNode
возвращает
XmlNode
, и
SelectNodes
возвращает
XmlNodeList
. Пространство имен
System.Xml.XPath
содержит более насыщенную реализацию
XPath
(см. ниже).

Ранее рассматривался пример

XmlTextWriter
, который создает новый документ. Ограничение состояло в том, что он не вставлял узел в текущий документ. Это можно сделать с помощью класса
XmlDocument
. Если изменить
button1_Click
из предыдущего примера, то получим следующий код (
DOMSample3
):

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

 // изменить путь доступа, как требуется существующей структурой

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

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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