Ватсон Карли
Шрифт:
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
: