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
) или, как мы скоро увидим, имеет ли узел атрибуты (
![Графика для Windows средствами DirectDraw](/storage/book-covers/6d/6dbc78361f37e9af5b71d5019ca64570a40e0466.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Виртуальная библиотека Delphi](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Пишем драйвер Windows на ассемблере](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Как писать драйвера](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![MFC и OpenGL](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Информационная технология. Оценка программной продукции характеристики качества и руководства по их применению](/build/oblozhka.dc6e36b8.jpg)
Стандарт подготовлен на основе применения аутентичного текста международного стандарта ИСО/МЭК 9126-91 «Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению»Information technology. Software product evaluation. Quality characteristics and guidelines for their use.