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

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

Перемещает к элементу с идентификатором ID, предоставленным в виде параметра. Должна существовать схема документа и данные элемента типа ID.
>MoveToParentПеремещает к предку текущего узла. Возвращает >true, если выполняется успешно.
>MoveToRootПеремещает к корневому узлу документа.

Существует также несколько методов >Select выбора подмножества узлов для работы. Все методы >Select возвращают объект >XPathNodeIterator. >XPathNodeIterator можно считать эквивалентом >NodeList или >NodeSet в >XPath. Этот объект имеет три свойства и два метода:

□ >Clone — создает новую копию себя

□ >Count — число узлов в объекте >XPathNodeIterator

□ >Current — возвращает >XPathNavigator, указывающий на текущий узел

□ >CurrentPosition — возвращает целое число, соответствующее текущей позиции

□ >MoveNext — перемещает в следующий узел, соответствующий выражению >Xpath, которое создало >XPathNodeIterator

Можно использовать также существующие методы >SelectAncestors и >SelectChildren. Они возвращают >XPathNodelterator. В то время, как >Select получает выражение >XPath в качестве параметра, другие методы выбора получают в качестве параметра >XPathNodeType. В рассматриваемом примере мы выбираем все узлы >XPathNodeType.Element.

Вот как выглядит экран после выполнения кода. Обратите внимание, что все перечисленные книги являются романами (novel).

Для добавления стоимости книг >XPathNavigator содержит метод >Evaluate. >Evaluate имеет три перегружаемые версии. Первая из них содержит строку, которая является вызовом функции >XPath. Вторая перегружаемая версия Evaluate использует в качестве параметра объект >XPathExpression, третья — >XPathExpression и >XPathNodeIterator. Сделаем следующие изменения в примере (эту версию кода можно найти в >XPathXSLSample2):

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

> //изменить в соответствии со структурой путей доступа

> XPathDocument doc=new XPathDocument("..\\..\\..\\booksxpath.XML");

> //создать XPathNavigator

> XPathNavigator nav=((IXPathNavigable)doc).CreateNavigator();

> //создать XPathNodeIterator узлов book,

> // которые имеют novel значением атрибута genre

> XPathNodeIterator iter=nav.Select("/bookstore/book[@genre="novel']");

> while(iter.MoveNext()) {

>  LoadBook(iter.Current.Clone());

> }

> // добавим разделительную линию и вычислим сумму

> listBox1.Items.Add("========================");

> listBox1.Items.Add("Total Cost = "

>  + nav.Evaluate("sum(/bookstore/book[@genre='novel']/price)"));

>}

При этом вывод изменится следующим образом:

XslTransform

Пространство имен >System.Xml.Xsl содержит классы XSL, применяемые .NET. >XslTransform может использоваться с любым хранилищем, которое реализует интерфейс >IXPathNavigable. В настоящее время на платформе .NET это: >XmlDocument, >XmlDataDocument и >XPathDocument. Так же как и в случае XPath, воспользуйтесь тем хранилищем, которое подходит лучшим образом. Если планируется создание заказного хранилища, такого как файловая система, и желательно иметь возможность выполнять преобразования, не забудьте реализовать в классе интерфейс >IXPathNavigable.

>XslTransform основывается на потоковой модели запросов. В связи с этим можно соединить несколько преобразования вместе. Можно даже применять, если нужно, между преобразованиями заказной объект чтения. Это предоставляет большую гибкость при проектировании.

В первом примере, который мы рассмотрим, берется документ >books.xml и преобразуется в простой документ HTML для вывода. (Этот код можно найти в папке >XPathXSLSample3.) Необходимо будет добавить следующие операторы >using:

>using System.IO;

>using System.Xml.Xsl;

>using System.Xml.XPath;

Вот код, выполняющий преобразование:

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

> //создать новый XPathDocument

> XPathDocument doc=new XPathDocument("..\\..\\..\\booksxpath.XML");

> // создать новый XslTransForm

> XslTransform transForm=new XslTransform();

> transForm.Load("..\\..\\..\\books.xsl");

> // этот FileStream будет нашим выводом

> FileStream fs=new FileStream("..\\..\\..\\booklist.html", FileMode.Create);

> // Создать Navigator

> XPathNavigator nav=((IXPathNavigable)doc).CreateNavigator();

> // Выполнить преобразование. Файл вывода создается здесь.

> transForm.Transform(nav, null, fs);

>}

Сделать это преобразование проще почти невозможно. Сначала создается объект на основе >XPathDocument и объект на основе >XslTransform. Затем файл >bookspath.xml загружается в >doc, a >books.xsl в >transForm. В этом примере для записи нового документа HTML на диск создается объект >FileStream.

Если бы это было приложение ASP.NET, мы использовали бы объект >TextWriter и передавали бы его в объект >HttpResponse. Если бы мы преобразовывали в другой документ XML, то применялся бы объект на основе >XmlWriter. После того как объекты >XPathDocument и >XslTransform будут готовы, мы создаем >XPathNavigator на >doc и передаем >nav и этот >stream в метод >Transform объекта >transForm. >XslTransform имеет несколько перегружаемых версий, получающих комбинации навигаторов, >XsltArgumentList (подробнее об этом позже) и потоков ввода/вывода. Параметром навигатора может быть >XPathNavigator или любой объект, реализующий интерфейс


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Виртуальная библиотека Delphi

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


Обработка баз данных на Visual Basic.NET

Это практическое руководство разработчика программного обеспечения на Visual Basic .NET и ADO.NET, предназначенное для создания приложений баз данных на основе WinForms, Web-форм и Web-служб. В книге описываются практические способы решения задач доступа к данным, с которыми сталкиваются разработчики на Visual Basic .NET в своей повседневной деятельности. Книга начинается с основных сведений о создании баз данных, использовании языка структурированных запросов SQL и системы управления базами данных Microsoft SQL Server 2000.


Исчерпывающее руководство по написанию всплывающих подсказок

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


Программное обеспечение встроенных систем. Общие требования к разработке и документированию

Embedded system software. General requirements for development and documentationСтандарт подготовлен в развитие ГОСТ Р ИСО/МЭК 12207-99 «Информационная технология. Процессы жизненного цикла программных средств» с целью учета специфики разработки и документирования программного обеспечения встроенных систем реального времени.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.