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)"));
>}
При этом вывод изменится следующим образом:
Пространство имен >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 Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Это практическое руководство разработчика программного обеспечения на 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-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.