Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
XML-Лекция 5. Создание XML-документов в C#.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
127.89 Кб
Скачать

2.1. Чтение xml-документа с помощью XmlNodeList

Создадим новое приложение WinXML-DOM WindowsApplication, которое будет читать данные книжного каталога и загружать названия книг в окно списка.

Для разнообразия данные будем выводить в Listbox. Это аналогично примеру применения XmlReader. Отличие заключается в том, что осуществляется выбор, с какими узлами мы хотим работать, вместо того чтобы использовать весь документ. Вот код для выполнения этого примера в среде XmlNode.

Добавим на форму список и две кнопки. Кроме того, добавим текстовые поля для следующей версии программы.

При нажатии кнопки Чтение в список выводим названия книг. Обработчик кнопки:

private void btmReadXML_Click(object sender, EventArgs e)

{

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

doc.Load("book2.xml");

// получить только те узлы, которые нужны

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

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

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

}

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

public partial class Form1 : Form

{

public XmlDocument doc = new XmlDocument();

public Form1()

{

InitializeComponent();

}

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

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

{

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

string srch = "INVENTORY/BOOK[TITLE='" + listBox1.SelectedItem.ToString() + "']";

// поиск дополнительных данных

XmlNode foundNode = doc.SelectSingleNode(srch);

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

else MessageBox.Show("Not found");

}

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

Небольшой комментарий в отношении метода SelectSingleNode. Это реализация XPath в классе XmlDocument. Существуют методы SelectSingleNode и SelectNodes. Оба они определены в XmlNode, на котором основывается XmlDocument. SelectSingleNode возвращает XmlNode, и SelectNodes возвращает XmlNodeList.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]