Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_ПАРАДИГМИ ПРОГРАМУВАННЯ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.32 Mб
Скачать

10.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.

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