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 узла в окне сообщения. Мы можем продолжать щелкать на элементах в


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.