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

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

>   doc=new DOMDocument30();

>   doc.load("..\\..\\..\\books.xml")

Следующие строки объявляют, что узлы являются >nodeList узлов книг. В данном случае имеется три узла:

>   IXMLDOMNodeList nodes;

>   nodes = doc.selectNodes("bookstore/book");

>   IXMLDOMNode node=nodes.nextNode();

Мы просматриваем узлы в цикле и добавляем текстовое значение атрибута ISBN в >listBox1:

>   while(node!=null) {

>    listBox1.Items.Add(node.attributes.getNamedItem("ISBN").text);

>    node=nodes.nextNode();

>   }

>  }

> }

>}

Вот как выглядит пример во время выполнения:

Это изображение появляется после того, как была нажата кнопка button1 и загрузился listBox1 с номерами ISBN книг. После выбора номера ISBN будет выведено следующее:

System.Xml

Пространство имен >System.Xml является мощным и относительно простым для использования, но оно отличается от модели MSXML 3.0. Если вы знакомы с MSXML 3.0, то применяйте его, пока не освоитесь с пространством имен >System.Xml. Пространство имен >System.Xml предлагает большую гибкость и легче расширяется.

Этот файл XML будет использоваться в примерах этой главы. Код, который только что был рассмотрен, лежит в основе нескольких примеров. В большинстве других будет показан только код, имеющий отношение к делу, и не будет повторяться то, что уже было показано.

Чтение и запись XML

Теперь посмотрим, что позволяет делать платформа .NET. Если раньше вы работали с SAX, то >XmlReader и >XmlWriter вам будут знакомы. Классы на основе >XmlReader предоставляют быстрый курсор только для чтения вперед, который создает поток данных XML для обработки. Так как это потоковая модель, то требования к памяти не очень большие. Однако в ней отсутствует навигационная гибкость и средства чтения/записи, присущие модели DOM. Классы на основе >XmlWriter будут создавать документ XML, который соответствует рекомендациям по пространствам имен XML 1.0 консорциума W3C.

>XmlReader и >XmlWriter являются абстрактными классами. Рисунок ниже показывает, какие классы являются производными от >XmlReader и >XmlWriter:

>XmlTextReader и >XmlTextWriter работают либо с объектами на основе потока, либо с объектами на основе >TextReader или >TextWriter. >XmlNodeReader использует >XmlNode вместо потока в качестве своего источника. >XmlValidatingReader добавляет DTD и проверку схем и поэтому предлагает проверку данных. Мы рассмотрим это подробнее позже в этой главе.

XmlTextReader

>XmlTextReader похож на SAX. Одно из различий заключается в том, что SAX является моделью типа рассылки (push), т.е. посылает данные приложению и разработчик должен быть готов принять их, a >XmlTextReader применяет модель запроса (pull), где данные посылаются приложению, которое их запрашивает. Это предоставляет более простую и интуитивно понятную модель для программирования. Другое преимущество состоит в том, что модель запроса может быть избирательной в отношении данных, посылаемых приложению. Если нужны не все данные, то их не нужно обрабатывать. В модели рассылки все данные XML должны быть обработаны приложением, нужны они ему или нет.

Возьмем простой пример считывания данных XML, и затем более внимательно рассмотрим класс >XmlTextReader. Код можно найти в папке >XmlReaderSample1. Можно заменить метод >button1_Click в предыдущем примере на следующий код. Эту версию данного кода можно найти в папке >SampleBase2 загруженного архива кода. Не забудьте изменить:

>using MSXML2;

на

>using System.Xml;

Мы должны это сделать, поскольку используем теперь не MSXML 3.0, а пространство имен >System.Xml. Нужно также удалить метод >listBox1_SelectedIndexChanged, так как он включает в себя некоторые неподдерживаемые методы и строку:

>private DOMDocument30 doc;


>protected void button1_Click(object sender, System.EventArgs e) {

> // Измените этот путь доступа, чтобы найти books.xml

> string fileName = "..\\..\\..\\books.xml";

> // Создать новый объект TextReader

> XmlTextReader tr = new XmlTextReader(fileName);

> // Прочитать узел за раз

> while(tr.Read()) {

>  if (tr.NodeType == XmlNodeType.Text) listBox1.Items.Add(tr.Value);

> }

>}

Это >XmlTextReader в простейшей форме. Сначала создается строковый объект >fileName с именем файла XML. Затем создается новый объект >XmlTextReader, передавая в качестве параметра строку >fileName.XmlTextReader в настоящее время имеет 13 различных перегружаемых конструкторов, которые получают различные комбинации строк (имен файлов и URL), потоков и таблиц имен. После инициализации объекта >XmlTextReader ни один узел не выбран. Это единственный момент, когда узел не является текущим. Когда мы начинаем цикл >tr.Read, первая операция чтения >Read переместит нас в первый узел документа. Обычно это бывает узел Declaration XML. В этом примере при переходе к каждому узлу >tr.NodeType сравнивается с перечислением >XmlNodeType, и когда встречается текстовый узел, значение текста добавляется в >listbox. Вот экран после того, как было загружено окно списка:

Существует несколько способов перемещения по документу. Как мы только что видели, >Read перемещает нас к следующему узлу. Затем можно проверить, имеет ли узел значение (>HasValue) или, как мы скоро увидим, имеет ли узел атрибуты (


Рекомендуем почитать
Язык PL/SQL

В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.


Пишем драйвер Windows на ассемблере

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


Язык программирования С# 2005 и платформа .NET 2.0.

В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.


Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса

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


Информационная технология. Руководство по управлению документированием программного обеспечения

ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИИнформационная технологияРУКОВОДСТВО ПО УПРАВЛЕНИЮ ДОКУМЕНТИРОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯInformation technology. Guidelines for the management of software documentationИздание официальноеДата введения 1994-07-01ГОССТАНДАРТ РОССИИ Москва© Издательство стандартов, 1994.


Самоучитель UML

Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы.