Чтение онлайн

на главную - закладки

Жанры

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

Ватсон Карли

Шрифт:

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

string srch=listBox1.SelectedItem.ToString;

IXMLDOMNode nd=doc.selectSingleNode("bookstore/book[@ISBN='" + srch + "']");

MessageBox.Show(nd.text);

}

Теперь мы имеем обработчик события нажатия кнопки. Сначала мы загружаем файл

books.xml
— обратите внимание, что если файл выполняется не в папке
bin/debug
или
bin/release
, необходимо исправить соответствующим образом путь доступа:

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

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
. Вот экран после того, как было загружено окно списка:

Поделиться:
Популярные книги

Скандальная свадьба

Данич Дина
1. Такие разные свадьбы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Скандальная свадьба

Орден Багровой бури. Книга 5

Ермоленков Алексей
5. Орден Багровой бури
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Орден Багровой бури. Книга 5

Адвокат Империи 7

Карелин Сергей Витальевич
7. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 7

АН (цикл 11 книг)

Тарс Элиан
Аномальный наследник
Фантастика:
фэнтези
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
АН (цикл 11 книг)

Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Клеванский Кирилл Сергеевич
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Вспоминай меня ночью

Рам Янка
Любовные романы:
современные любовные романы
эро литература
5.60
рейтинг книги
Вспоминай меня ночью

Адвокат вольного города 3

Кулабухов Тимофей
3. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Адвокат вольного города 3

На границе империй. Том 9. Часть 5

INDIGO
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 5

Адвокат вольного города 4

Кулабухов Тимофей
4. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Адвокат вольного города 4

Земная жена на экспорт

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Земная жена на экспорт

Варлорд

Астахов Евгений Евгеньевич
3. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Варлорд

Баронесса. Эхо забытой цивилизации

Верескова Дарья
1. Проект «Фронтир Вита»
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Баронесса. Эхо забытой цивилизации

Неудержимый. Книга XVII

Боярский Андрей
17. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVII

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений