C# для профессионалов. Том II | страница 5
> 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
являются абстрактными классами. Рисунок ниже показывает, какие классы являются производными от