C# для профессионалов. Том II - [7]

Шрифт
Интервал

. >XmlNode является абстрактным классом, который представляет узел документа XML. >XmlNodeList является упорядоченным списком узлов. Это живой список узлов, и любые изменения в любом узле немедленно отражаются в списке. >XmlNodeList поддерживает индексный доступ или итеративный доступ. Эти два класса составляют основу реализации DOM на платформе .NET. Вот список классов, которые основываются на >XmlNode.

Имя классаОписание
>XmlLinkedNodeРасширяет >XmlNode. Возвращает узел непосредственно перед или после текущего узла. Добавляет свойства >NextSibling и >PreviousSibling в >XmlNode.
>XmlDocumentРасширяет >XmlNode. Представляет весь документ. Реализует спецификации DOM Level 1 и Level 2.
>XmlAttributeРасширяет >XmlNode. Объект атрибута объекта >XmlElement.
>XmlCDataSectionРасширяет >XmlCharacterData. Объект, который представляет раздел документа >CData.
>XmlCharacterDataАбстрактный класс, который предоставляет методы манипуляции с текстом для других классов. Расширяет >XmlLinkedNode.
>XmlCommentРасширяет >XmlCharacterData. Представляет объект комментария XML.
>XmlDeclarationРасширяет >XmlLinkedNode. Представляет узел объявления (>)
>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, частью которого является title (foundNode). Выведем для наглядности InnerText узла в окне сообщения. Мы можем продолжать щелкать на элементах в


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Виртуальная библиотека Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка баз данных на Visual Basic.NET

Это практическое руководство разработчика программного обеспечения на Visual Basic .NET и ADO.NET, предназначенное для создания приложений баз данных на основе WinForms, Web-форм и Web-служб. В книге описываются практические способы решения задач доступа к данным, с которыми сталкиваются разработчики на Visual Basic .NET в своей повседневной деятельности. Книга начинается с основных сведений о создании баз данных, использовании языка структурированных запросов SQL и системы управления базами данных Microsoft SQL Server 2000.


Исчерпывающее руководство по написанию всплывающих подсказок

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Программное обеспечение встроенных систем. Общие требования к разработке и документированию

Embedded system software. General requirements for development and documentationСтандарт подготовлен в развитие ГОСТ Р ИСО/МЭК 12207-99 «Информационная технология. Процессы жизненного цикла программных средств» с целью учета специфики разработки и документирования программного обеспечения встроенных систем реального времени.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.