C# для профессионалов. Том II | страница 14



. Данные, связанные с объявлением типа документа.
>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 является лучшим для этого способом. Слегка расширим пример (новая версия находится в