XmlDocumentFragment Расширяет XmlNode. Представляет фрагмент дерева документа.
XmlDocumentType Расширяет XmlLinkedNode. Данные, связанные с объявлением типа документа.
XmlElement Расширяет XmlLinkedNode. Объект элемента XML.
XmlEntity Расширяет XmlNode. Синтаксически разобранный или неразобранный узел сущности.
XmlEntityReferenceNode Расширяет XmlLinkedNode. Представляет ссылочный узел сущности
XmlNotation Расширяет XmlNode. Содержит нотацию, объявленную в DTD или в схеме.
XmlProcessingInstruction Расширяет XmlLinkedNode. Содержит инструкцию обработки XML.
XmlSignificantWhitespace Расширяет XmlCharacterData. Представляет узел с разделителем. Узлы создаются, только если флаг PreserveWhiteSpace задан как true.
XmlWhitespace Расширяет XmlCharacterData. Представляет разделитель в содержимом элемента. Узлы создаются, только если флаг PreserveWhiteSpace задан как true.
XmlText Расширяет XmlCharacterData. Текстовое содержимое элемента или атрибута.

Как можно видеть .NET делает доступным класс, соответствующий почти любому типу XML. Мы не будем рассматривать каждый класс подробно, но разберем несколько примеров. Вот как выглядит диаграмма наследования:

Первый пример будет создавать объект XmlDocument, загружать документ с диска и загружать окно списка с данными из элементов title. Это аналогично одному из примеров, которые были выполнены в разделе XmlReader. Отличие заключается в том, что осуществляется выбор, с какими узлами мы хотим работать, вместо того чтобы использовать весь документ. Вот код для выполнения этого в среде XmlNode. Посмотрите, как просто он выглядит при сравнении (файл можно найти в папке DOMSample1 загруженного архива):

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 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,

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×