Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

XPathNavigator
содержит все методы для перемещения и выбора элементов, которые могут понадобиться. Приведем некоторые из методов перемещения:

Имя метода Описание
MoveTo Получает в качестве параметра
XPathNavigator
. Делает текущей позицию, которая указана в
XPathNavigator
.
MoveToAttribute
Перемещает к именованному атрибуту. Получает имя атрибута и пространство имен как параметры.
MoveToFirstAttribute
Перемещает к первому атрибуту текущего элемента. Возвращает
true
, если выполняется успешно.
MoveToNextAttribute
Перемещает к следующему атрибуту текущего элемента. Возвращает
true
, если выполняется успешно.
MoveToFirst
Перемещает к первому
sibling
текущего узла. Возвращает
true
, если выполняется успешно, в противном случае возвращает
false
.
MoveToLast
Перемещает к последнему
sibling
текущего узла. Возвращает
true
, если выполняется успешно.
MoveToNext
Перемещает к следующему
sibling
текущего узла. Возвращает
true
, если выполняется успешно.
MoveToPrevious
Перемещает к предыдущему
sibling
текущего узла. Возвращает
true
, если выполняется успешно.
MoveToFirstChild
Перемещает к первому потомку текущего элемента. Возвращает
true
, если выполняется успешно.
MoveToId
Перемещает к элементу с идентификатором 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
:

  • Читать дальше
  • 1
  • ...
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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