Книги по XSLT и XPath. Xpath книга


Книги по XSLT и XPath

Вот еще книжки по теме: Название: SQL Server 2000 XML Автор: Берк Пол Дж. и другие Год: 2003 (анг. 2001) Страниц: 628 Формат: DjVu Размер: 14.2 mb (rar) Качество: нормальное, читаемое (не OCR) Язык: русский Подробно описана техника работы с базами данных SQL Server посредством XML-документов. Рассмотрен стандарт XML, техника извлечения данных из базы с помощью FOR XML, возможности представления XML-документов в виде реляционных наборов данных с помощью OPENXML. Уделено внимание XDR и XSD-схемам как средству получения данных посредством HTTP-запросов. Подробно обсуждается использование XPath-запросов к SQL Server и технология модификации баз данных с помощью апдейтограмм. Рассмотрены представления XML View как средство описания таблиц SQL Server. Продемонстрирована техника импорта XML-документов в базу данных с помощью массовой загрузки XML Bulk Load. Описаны новинки релиза Web Release 2. В книгу включены пять практических примеров, позволяющих читателю на собственном опыте убедиться в преимуществах XML-технологий при работе с SQL Server 2000. Книга рассчитана на опытных программистов SQL Server, которые хотят организовать XML-доступ к данным в базе SQL Server 2000, воспользовавшись новыми возможностями дополнений Web Release.

http://rapidshare.com/files/45869929/SQL_Server_2000_XML.rarhttp://natahaus.ifolder.ru/2848852

Название: «Программирование для Microsoft SQL SERVER 2000 с использованием XML» Автор: Грэм Малкольм Издательство: Русская Редакция Год: 2002 Страниц: 320 Формат: PDF Размер: 12,53 Mb ISBN: 5750202054, 0735613699 Качество: Хорошее Язык: Русский Эта книга - практическое руководство по разработке бизнес-приложений на основе XML и SQL Server. В ней подробно обсуждаются получение, вставка и сопоставление XML-данных при помощи известных технологий (XPath, XDR-схемы, язык XSL Transformation, HTTP и OLE DB) и новых технологий. На реальных примерах демонстрируется перенос важных бизнес-процессов предприятия в Web с использованием SQL Server и XML. В приложении, предназначенном администраторам СУБД SQL Server, обсуждаются основы языка XML. Книга состоит из 9 глав и приложения. Она адресована всем, кто хочет научиться при помощи XML интегрировать приложения и бизнес-процессы предприятий, хранящих данные в БД SQL Server.

http://rapidshare.de/files/24171921/GMalcolm.rar.htmlhttp://rapidshare.com/files/2373738/_MicrosoftSQLServer2000XML.djvu.htmlhttp://www.sendspace.com/file/sj4xsmhttp://up.spbland.ru/files/060703234/http://slil.ru/22894085

Деван Шеперд Освой самостоятельно XML за 21 день Teach Yourself XML in 21 Days. Second Edition Серия: Освой самостоятельно за 21 день Издательство: Вильямс , 2002 г. Мягкая обложка, 432 стр. ISBN 5-8459-0272-X Тираж: 3500 экз. Формат: 70x100/16 Перед вами книга, посвященная одному из самых перспективных языков разметки - XML. Из настоящей книги вы узнаете, что такое языки разметки вообще, что такое правильные и действительные документы XML, а также что такое схемы, используемые для их проверки. Кроме того, в книге рассмотрены такие темы, как пространства имен XML, языки XPath, XLink, XPointer и XSL, применение DOM и SAX для обработки документов XML, а также использование таблиц стилей. В отдельную часть вынесены различные вопросы, связанные с практическим использованием XML, например, в электронной коммерции. Книга рассчитана на пользователей с различным уровнем подготовки. djvu

http://rapidshare.de/files/790099/Sheperd._Osvoy_samostoyatelno_XML_za_21_den.djvu.h%20tmlhttp://slil.ru/22443295http://rapidshare.com/files/13693431/XML_za_21_den_infanata.org__.rar Новенькое зеркальце: Премиум RapidShare.com Пароль: infanatahttp://rapidshare.com/files/84583446/1128937951.rar.html

 

www.nulled.cc

XML и XPath

XPath – это язык для поиска информации внутри XML документа.

Что такое XPath?

  • XPath - специальный язык для определения частей XML документа
  • XPath использует маршрутные выражения для навигации по XML документам
  • XPath содержит библиотеку стандартных функций
  • XPath — главный элемент в XSLT
  • XPath также используется в XQuery, XPointer и XLink

Маршрутные выражения XPath

XPath использует маршрутные выражения для выбора узлов или узловых наборов в XML документе. Эти маршрутные выражения похожи на те выражения, которые можно увидеть при работе с традиционными файловыми системами.

В настоящее время выражения XPath можно использовать в JavaScript, Java, XML схемах, PHP, Python, C и C++, а также во множестве других языках программирования.

XPath используется в XSLT

XPath является главным составляющим элементом стандарта XSLT. Без знания XPath невозможно создавать документы XSLT.

Пример XPath

Для демонстрации XPath будем использовать следующий XML документ:

<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>

В приведенной ниже таблице представлены некоторые выражения XPath и результат их работы:

Выражение XPathРезультат
/bookstore/book[1]Выбирает первый элемент book, который является потомком элемента bookstore
/bookstore/book[last()]Выбирает последний элемент book, который является потомком элемента bookstore
/bookstore/book[last()-1]Выбирает предпоследний элемент book, который является потомком элемента bookstore
/bookstore/book[position()<3]Выбирает первые два элемента book, которые являются потомками элемента bookstore
//title[@lang]Выбирает все элементы title с атрибутом lang
//title[@lang='eng']Выбирает все элементы title с атрибутом lang, который имеет значение 'eng'
/bookstore/book[price>35.00]Выбирает все элементы book, которые являются потомками элемента bookstore и которые содержать элемент price со значением больше 35.00
/bookstore/book[price>35.00]/titleВыбирает все элементы title элементов book элементов bookstore, которые содержать элемент price со значением больше 35.00

msiter.ru

Самый краткий справочник по "простейшему" XPath и полсотни примеров

Сделан по двум книгам. "Самоучитель XML" и "XSLT сборник рецептов". Здесь я "адаптировал" почти все примеры для HTML и выполнил их, используя библиотеку lxml. Не хватило терпения на примеры фильтров, я просто скопировал их из книги...

Помним, что строки запросов строятся по принципу Ось::Тест узла[Предикат]¶

In []:

#Тест по имени узла (axis) / #Узел документа (нет в списке осей) self:: # child:: #Прямой потомок descendant:: #Все потомки descendant-or-self:: # following:: # ниже (по тексту) following-sibling:: preceding:: # выше (по тексту) preceding-sibling:: parent:: # ancestor:: # ancestor-or-self:: # attribute:: #

In []:

#Тест по виду узла node() # Узел любого вида text() # Текстовый узел comment() # Узлы-комментарии element() # =element(*) = element(*,*) element(name,type) # Все узлы с именем name attribute() # =attribute(@*) = attribute(@*,*) attribute(@name) attribute(@name,type) processing-instruction() processing-instruction(name) #Отбирает все инструкции по обработке с имененм обрабатывающей программы name document-node() document-node(element(args))

In []:

# Сокращения // #= descendant-or-self::node()/ attribute::* #= attribute::node() namespace::* #= namespace::node() axis::* #= axis::element() (axis - любая ось) * #= child::element() @ #= attribute:: (@href, @*,) . #= self::node() .. #= parent::node()

In []:

# Предикат - True / False [1] #= [position()=1] Первый найденный узе[last()-1] #= предпоследний узел AAA/BBB/CCC[last()-1] #Предпоследний из элементов ССС, вложенных в BBB //*[count(CCC)=2] #Все элементы документа с двумя вложенными CCC /*[count(CCC)=2] #Все элементы документа с двумя любыми вложенными элементами //DDD[@name] #Все DDD c атрибутом name //[email protected]="3"] # DDD c атрибутом //DDD[not(@name)] #Все DDD без атрибута name
Для работы с XPath c с кодом из In [5]

from lxml import html in1=html.fromstring(In[89])

Оси потомков¶

In [89]:

<div> <div> <span/> <span /> <p > <span /> <p/> <span /> </p> <span /> <p/> <p/> <span /> <span /> <p/> </div> </div> File "<ipython-input-89-557295199905>", line 1 <div> ^ SyntaxError: invalid syntax

In []:

#Дочерняя ось принимается в XPath по умолчанию. Иными словами, явно указывать ось child:: #необязательно, но, если вы хотите быть педантом, то можете # указать. Спуститься по XML дереву глубже, чем на один уровень, позволяют #оси descendant:: #и descendant or self:: #Первая не включает сам контекстный узел, вторая – включает.

In [10]:

in1.xpath('span') , in1.xpath('*/span/@id'), in1.xpath('//span/@id') # // = descendant-or-self::node()/ # * = child::element()

Out[10]:

([], ['4', '7', '8'], ['1', '2', '3-1', '3-3', '4', '7', '8'])

In [14]:

#Отображать второй дочерний элемент in1.xpath('*/span[2]/@id'), in1.xpath('//span[2]/@id')

In [19]:

in1.xpath('*/span[last()-2]/@id') # Последний элемент

In [24]:

in1.xpath('//span[2][self::span]/@id'), in1.xpath('//span/@id') # [self::span] - При условии, что элемент называется span

Out[24]:

(['2', '7'], ['1', '2', '3-1', '3-3', '4', '7', '8'])

In [34]:

# Отображать всех потомков (и внуков) in1.xpath('div/@id'), in1.xpath('div/div/@class')

Out[34]:

(['descendants'], ['parent'])

In [35]:

in1.xpath('*/div/descendant::p/@id') # Все потомки с именем 'p' во вложеном теге div

In [37]:

in1.xpath('div/descendant::p/@id') # Все потомки с именем 'p' в корневом теге div

Out[37]:

['3', '3-2', '5', '6', '9']

In [41]:

in2=html.fromstring(In[40])

In [40]:

<div> <span/> <span/> <p/> <span/> <p/> <br/> <span/> <span/> <p/> </div> File "<ipython-input-40-3946c97984bd>", line 1 <div> ^ SyntaxError: invalid syntax

In [51]:

# Отображать всех братьев-предшественников с именем span in2.xpath('//span[4]/@id'), in2.xpath('//span[4]/preceding-sibling::span/@id')

In [57]:

# Отображать всех братьев-предшественников с именем p # и вместо номера по порядку условие с id in2.xpath('//span[@id="7"]/@id'), in2.xpath('//span[@id="7"]/preceding-sibling::p/@id')

In [59]:

# братья - последователи с именем span in2.xpath('//span[@id="7"]/@id'), in2.xpath('//span[@id="7"]/following-sibling::span/@id')

In [60]:

# последователи с именем * (любым) in2.xpath('//span[@id="7"]/@id'), in2.xpath('//span[@id="7"]/following-sibling::*/@id')

In [61]:

# Отображать ближайшего (первого) братьев-предшественников с именем span # cмотри In [51] - там все братья in2.xpath('//span[4]/@id'), in2.xpath('//span[4]/preceding-sibling::span[1]/@id')

In [63]:

# Отображать ближайшего (первого) братьев-предшественников # при условии, что его имя span # cмотри In [51] - там все братья in2.xpath('//span[4]/@id'), in2.xpath('//span[4]/preceding-sibling::*[1][self::span]/@id')

In [65]:

# Отображать ближайшего (первого) братьев-предшественников # при условии, что его имя br # cмотри In [51] - там все братья in2.xpath('//span[4]/@id'), in2.xpath('//span[4]/preceding-sibling::*[1][self::br]/@id')

In [66]:

# Отображать братьев-предшественников # при условии, что они не span # cмотри In [51] - там все братья in2.xpath('//span[4]/@id'), in2.xpath('//span[4]/preceding-sibling::*[not(self::span)]/@id')

In []:

Далее снова будем использовать пример <div> <div> <span/> <span /> <p > <span /> <p/> <span /> </p> <span /> <p/> <p/> <span /> <span /> <p/> </div> </div>

In [110]:

# Первый брат сверху при условии, что у него есть дочка span in1.xpath('//span[@id="4"]/@id'), in2.xpath('//span[@id="4"]/preceding-sibling::*[1][span]/@id')

In []:

preceding-sibling::*[1][A] # Пример выше не получился ...

In [114]:

# Первый брат сверху при условии, что его зовут span in1.xpath('//span[4]/@id'), in2.xpath('//span[4]/preceding-sibling::p[p][2]/@id')

In []:

# Пример выше не получился ...
Родительская ось и ось предков¶

Родительская ось (parent::) относится к родителю контекстного узла.

Первое порождает последовательность, которая содержит в точности один элемент, если имя родителя контекстного узла – X, и пуста в противном случае. Второе – это сокращенная запись выражения parent::node()/X , которое отбирает всех братьев контекстного узла с именем X, в том числе и сам этот узел, если он называется X. С помощью осей ancestor:: ancestor or self:: можно перемещаться вверх по XML дереву (переходя к родителю, деду, прадеду и т.д.). В первом случае сам контекстный узел исключается, во втором – включается.

In []:

#Не путайте выражение parent::X #îçâðàùàåò ðîäèòåëÿ êîíòåêñòíîãî óçëà, ïðè óñëîâèè, ÷òî îí íàçûâàåòñÿ X, â ïðîòèâíîì ñëó÷àå – ïóñòóþ ïîñëåäîâàòåëüíîñò #с ../X <div> <div> <span/> <span /> <p > <span /> <p/> <span /> </p> <span /> <p/> <p/> <span /> <span /> <p/> </div> </div>

In [126]:

in1.xpath('//span[@id="3-1"]/@id'), in1.xpath('//span[@id="3-1"]/parent::node()/@id')

In [137]:

in1.xpath('//span[@id="3-1"]/@id'), in1.xpath('//span[@id="3-1"]/parent::p/@id'), in1.xpath('//span[@id="3-1"]/parent::*/@id')

In [144]:

in1.xpath('//span[@id="3-1"]/@id'), in1.xpath('//span[@id="3-1"]/ancestor::p/@id'), in1.xpath('//span[@id="3-1"]/ancestor::*/@id')

Out[144]:

(['3-1'], ['3'], ['descendants', '3'])

In [146]:

in1.xpath('//p[@id="3"]/ancestor-or-self::*/@id'), in1.xpath('//p[@id="3"]/ancestor-or-self::*/span/@id'),

Out[146]:

(['descendants', '3'], ['1', '2', '3-1', '3-3', '4', '7', '8'])
Оси предшественников и последователей¶

In [152]:

in1.xpath('//span[@id="4"]/preceding::*/@id'), in1.xpath('//span[@id="4"]/preceding::p/@id')

Out[152]:

(['1', '2', '3', '3-1', '3-2', '3-3'], ['3', '3-2'])

In [153]:

in1.xpath('//span[@id="4"]/preceding::p[2]/@id'), in1.xpath('//span[@id="4"]/preceding::p[last()-1]/@id')

In [157]:

# У всех кроме div, по два атрибута, поэтому фильтровать # по количесвтву атрибутов нечего, но можно in1.xpath('//span[@*]/@id'), in1.xpath('//span[count(@*) >= 2]/@id'), in1.xpath('//div[count(@*) >= 2]/@id')

Out[157]:

(['1', '2', '3-1', '3-3', '4', '7', '8'], ['1', '2', '3-1', '3-3', '4', '7', '8'])

In []:

[not(@*)] X[@a eq '10'] X[Z eq '10'] X[Z ne '10'] X[text()] X[text()][normalize-space(.)] X[node()] X[comment()] X[number(@a) < 10] X[preceding-sibling::Z/@y ne '10'] X[. = ' '] X[false()] X[true()] X[count(*) eq 5] X[count(node()) eq 5] X[count(@*) | node()) eq 5] X[1][. eq 'some text'] X[. eq 'some text'][1]

Выше примеры фильтров описния к которым можно посмотреть по ссылке в заголовке раздела

Посты чуть ниже также могут вас заинтересовать

pythonr.blogspot.com

Оси XPath

Пример XML документа

Для демонстрации осей XPath будет использоваться следующий XML документ.

<?xml version="1.0" encoding="UTF-8"?> <messages> <note> <heading date="10/01/2008">Напоминание</heading> <body>Отправить письмо!</body> </note> <note> <heading date="11/01/2008">Re: Напоминание</heading> <body>Письмо отправлено</body> </note> </messages>

Оси XPath

Ось определяет отношение узлового набора по отношению к текущему узлу.

Название оси Результат
ancestor Выбирает всех предков текущего узла
ancestor-or-self Выбирает всех предков текущего узла и сам текущий узел
attribute Выбирает все атрибуты текущего узла
child Выбирает всех прямых потомков текущего узла
descendant Выбирает всех потомков текущего узла
descendant-or-self Выбирает всех потомков текущего узла и сам текущий узел
following Выбирает все элементы в документе после закрывающего тега текущего узла
following-sibling Выбирает все элементы одного уровня после текущего узла
namespace Выбирает все узлы пространства имен текущего узла
parent Выбирает родителя текущего узла
preceding Выбирает все узлы, которые появляются перед текущим узлом, за исключением предков, узлов атрибутов и пространства имен
preceding-sibling Выбирает все элементы одного уровня до текущего узла
self Выбирает текущий узел

Выражение пути выборки

Путь выборки может быть абсолютным или относительным.

Абсолютный путь выборки начинается с символа косой черты ( / ), а относительный нет. В обоих случаях такой путь содержит один или более шагов, разделенных косой чертой:

Абсолютный путь: /шаг/шаг/... Относительный путь: шаг/шаг/...

Каждый шаг вычисляется по отношению к узлам в текущем узловом наборе.

Шаг содержит:

  • ось (определяет древовидное отношение между выбранными узлами и текущим узлом)
  • проверка узла (определяет узел внутри оси)
  • ноль или больше предикатов (для более точного указания выбранного узлового набора)

Синтаксис для шага выборки имеет следующий вид:

имяОси::проверкаУзла[предикат]

Примеры

Пример Результат
child::note Выбирает все узлы note, которые являются прямыми потомками текущего узла
attribute::date Выбирает атрибут date текущего узла
child::* Выбирает всех прямых потомков текущего узла
attribute::* Выбирает все атрибуты текущего узла
child::text() Выбирает все текстовые узлы текущего узла
child::node() Выбирает всех прямых потомков текущего узла
descendant::note Выбирает всех потомков note текущего узла
ancestor::note Выбирает всех предков note текущего узла
ancestor-or-self::note Выбирает всех предков note текущего узла, а также сам текущий узел, если это узел note
child::*/child::heading Выбирает всех прямых потомков прямых потомков ("внуков") heading текущего узла

msiter.ru

XPath - это... Что такое XPath?

XPath (XML Path Language) — язык запросов к элементам XML-документа. Разработан для организации доступа к частям документа XML в файлах трансформации XSLT и является стандартом консорциума W3C. XPath призван реализовать навигацию по DOM в XML. В XPath используется компактный синтаксис, отличный от принятого в XML. В 2007 году завершилась разработка версии 2.0, которая теперь является составной частью языка XQuery 1.0. В декабре 2009 года началась разработка версии 2.1, которая использует XQuery 1.1.

На данный момент, самой популярной версией является XPath 1.0. Это связано с отсутствием поддержки XPath 2.0 со стороны открытых библиотек. В частности, речь идёт о LibXML, от которой зависит поддержка языка в браузерах с одной стороны и поддержка со стороны серверного интерпретатора с другой.

Основы

XML имеет древовидную структуру. В документе всегда имеется корневой элемент (инструкция <?xml version="1.0"?> к дереву отношения не имеет). У элемента дерева всегда существуют потомки и предки, кроме корневого элемента, у которого предков нет, а также тупиковых элементов (листьев дерева), у которых нет потомков. Каждый элемент дерева находится на определенном уровне вложенности (далее — «уровень»). У элементов на одном уровне бывают предыдущие и следующие элементы.

Это очень похоже на организацию каталогов в файловой системе, и строки XPath, фактически, — пути к «файлам» — элементам.

Например, рассмотрим XHTML документ:

<html> <body> <div>Первый слой <span>блок текста в первом слое</span> </div> <div>Второй слой</div> <div>Третий слой <span>первый блок в третьем слое</span> <span>второй блок в третьем слое</span> <span>третий блок в третьем слое</span> </div> <img /> </body> </html>

XPath-путь /html/body/*/span[@class] (полный синтаксис имеет вид /child::html/child::body/child::*/child::span[attribute::class]) будет соответствовать в нём двум элементам исходного документа — <span>первый блок в третьем слое</span> и <span>второй блок в третьем слое</span>.

Путь делится на шаги адресации, которые разделяются символом «косая черта» / . Каждый шаг адресации состоит из трех частей:

  • ось (в данном примере child::), это обязательная часть;
  • условие проверки узлов (в данном примере это имена элементов документа html, body, span, а символ * означает элемент с любым именем), также обязательная часть;
  • предикат (в данном примере attribute::class), необязательная часть, заключаемая в квадратные скобки, в которой могут содержаться оси, условия проверки, функции, операторы (+, -, <, > и пр.).

Анализ ведется слева направо. Если первый символ это / , то путь адресации считается абсолютным (то есть от корня документа). При этом за узел контекста на первом шаге берется корневой элемент (html). Контекст — это некая точка отсчета, относительно которой рассчитывается следующий шаг адресации. Поэтому на каждом шаге адресации мы получаем новый набор узлов документа, и этот набор становится контекстом для следующего шага адресации.

На втором шаге адресации (child::body) контекстом становится html элемент. Ось child:: говорит о том, что необходимо найти все непосредственные потомки элемента html, а условие проверки body говорит о том, что в формируемый набор элементов нужно включить все узлы с именем body. В ходе второго шага адресации получаем набор узлов, состоящий всего из одного элемента body, который и становится элементом контекста для третьего шага.

Третий шаг адресации: child::* . Ось child:: собирает все непосредственные потомки элемента body, а условие проверки * говорит о том, что в формируемый набор нужно включить элементы основного типа с любым именем. В ходе этого шага получаем набор узлов, состоящий из трех элементов div и одного элемента img.

Четвёртый шаг адресации: child::span . Теперь контекстом является набор из четырёх элементов. И следующий набор узлов создается в четыре прохода (за четыре итерации). При первой итерации узлом контекста становится первый div. Согласно заданной оси child:: и правилу проверки span, в набор включаются непосредственные потомки div-а, имя которых равно span. При второй итерации в набор ничего добавлено не будет, так как у второго div нет потомков. Третья итерация добавит в набор сразу три элемента span, а четвёртая ничего не добавит, так как у элемента img нет потомков. Итак, в ходе проверки получен набор узлов, состоящий из четырёх элементов span. Это и будет контекстом для последующей обработки.

Следующего шага нет, поэтому будет производиться фильтрация отобранного набора. В этом и состоит отличие предикатов от шагов адресации. На каждом шаге адресации получаем новый набор, отталкиваясь от контекста, полученного на предыдущем шаге. В ходе же обработки предиката новый набор получается из текущего методом фильтрации, когда из набора исключаются узлы, не прошедшие условие проверки. В данном случае ось attribute:: говорит о необходимости проверить, если ли у узлов контекста атрибуты, а условие class требует оставить лишь те узлы, у которых задан атрибут с именем class. Фильтрация происходит за четыре итерации, но в окончательный набор попадают только два элемента span.

Оси

Оси — это база языка XPath.

  • ancestor:: — Возвращает множество предков.
  • ancestor-or-self:: — Возвращает множество предков и текущий элемент.
  • attribute:: — Возвращает множество атрибутов текущего элемента.
  • child:: — Возвращает множество потомков на один уровень ниже.
  • descendant:: — Возвращает полное множество потомков.
  • descendant-or-self:: — Возвращает полное множество потомков и текущий элемент.
  • following:: — Возвращает необработанное множество, ниже текущего элемента.
  • following-sibling:: — Возвращает множество элементов на том же уровне, следующих за текущим.
  • namespace:: — Возвращает множество, имеющее пространство имён (то есть присутствует атрибут xmlns).
  • parent:: — Возвращает предка на один уровень назад.
  • preceding:: — Возвращает множество обработанных элементов исключая множество предков.
  • preceding-sibling:: — Возвращает множество элементов на том же уровне, предшествующих текущему.
  • self:: — Возвращает текущий элемент.

Существуют сокращения для некоторых осей, например:

  • attribute:: — можно заменить на «@»
  • child:: — часто просто опускают
  • descendant:: — можно заменить на «.//»
  • parent:: — можно заменить на «..»
  • self:: — можно заменить на «.»

Дополнением к базе является набор функций, которые делятся на 5 групп:

Системные функции

node-set document(object, node-set?) Возвращает документ, указанный в параметре object. string format-number(number, string, string?) Форматирует число согласно образцу, указанному во втором параметре, третий параметр указывает именованный формат числа, который должен быть учтён. string generate-id(node-set?) Возвращает строку, являющуюся уникальным идентификатором. node-set key(string, object) Возвращает множество с указанным ключом (аналогично функции id для идентификаторов). string unparsed-entity-uri(string) Возвращает непроанализированный URI, если такового нет, возвращает пустую строку. boolean element-available(string) Проверяет, доступен ли элемент или множество, указанное в параметре. Параметр рассматривается как XPath. boolean function-available(string) Проверяет, доступна ли функция, указанная в параметре. Параметр рассматривается как XPath. object system-property(string) Параметры, возвращающие системные переменные, могут быть: * xsl: version — возвращает версию XSLT процессора. * xsl: vendor — возвращает производителя XSLT процессора. * xsl: vendor-url — возвращает URL, идентифицирующий производителя. Если используется неизвестный параметр, функция возвращает пустую строку. boolean lang(string) Возвращает истину, если у текущего тега имеется атрибут xml: lang, либо родитель тега имеет атрибут xml: lang и в нем указан совпадающий строке символ.

Функции с множествами

  • * — обозначает любое имя или набор символов, @* — любой атрибут
  • $name — обращение к переменной, где name — имя переменной или параметра.
  • [] — дополнительные условия выборки
  • {} — если применяется внутри тега другого языка (например HTML), то XSLT процессор рассматривает содержимое фигурных скобок как XPath.
  • / — определяет уровень дерева
node-set node() Возвращает все узлы. Для этой функции часто используют заменитель '*', но в отличие от звездочки — node() возвращает и текстовые узлы. string text() Возвращает набор текстовых узлов; node-set current() Возвращает множество из одного элемента, который является текущим. Если мы делаем обработку множества с условиями, то единственным способом дотянуться из этого условия до текущего элемента будет данная функция. number position() Возвращает позицию элемента в множестве. Корректно работает только в цикле <xsl:for-each/> number last() Возвращает номер последнего элемента в множестве. Корректно работает только в цикле <xsl:for-each/> number count(node-set) Возвращает количество элементов в node-set. string name(node-set?) Возвращает полное имя первого тега в множестве. string namespace-uri(node-set?) Возвращает ссылку на url определяющий пространство имён. string local-name(node-set?) Возвращает имя первого тега в множестве, без пространства имён. node-set id(object) Находит элемент с уникальным идентификатором

Строковые функции

string string(object?) Возвращает текстовое содержимое элемента. По сути возвращает объединенное множество текстовых элементов на один уровень ниже. string concat(string, string, string*) Объединяет две или более строк number string-length(string?) Возвращает длину строки. boolean contains(string, string) Возвращает истину, если первая строка содержит вторую, иначе возвращает ложь. string substring(string, number, number?) Возвращает строку вырезанную из строки начиная с указанного номера, и если указан второй номер — количество символов. string substring-before(string, string) Если найдена вторая строка в первой, возвращает строку до первого вхождения второй строки. string substring-after(string, string) Если найдена вторая строка в первой, возвращает строку после первого вхождения второй строки. boolean starts-with(string, string) Возвращает истину если вторая строка входит в начало первой, иначе возвращает ложь. boolean ends-with(string, string) Возвращает истину если вторая строка входит в конец первой, иначе возвращает ложь. string normalize-space(string?) Убирает лишние и повторные пробелы, а также управляющие символы, заменяя их пробелами. string translate(string, string, string) Заменяет символы первой строки, которые встречаются во второй строке, на соответствующие позиции символам из второй строки символы из третьей строки. translate(«bar», «abc», «ABC») вернет BAr.

Логические функции

  • or — логическое «или»
  • and — логическое «и»
  • = — логическое «равно»
  • < (&lt;) — логическое «меньше»
  • > (&gt;) — логическое «больше»
  • <= (&lt;=) — логическое «меньше либо равно»
  • >= (&gt;=) — логическое «больше либо равно»
boolean boolean(object) Приводит объект к логическому типу; boolean true() Возвращает истину. boolean false() Возвращает ложь. boolean not(boolean) Отрицание, возвращает истину если аргумент ложь и наоборот.

Числовые функции

  • + — сложение
  • − — вычитание
  • * — умножение
  • div — обычное деление (не деление нацело!)
  • mod — остаток от деления
number number(object?) Переводит объект в число. number sum(node-set) Вернёт сумму множества, каждый тег множества будет преобразован в строку и из него получено число. number floor(number) Возвращает наибольшее целое число, не большее, чем аргумент. number ceiling(number) Возвращает наименьшее целое число, не меньшее, чем аргумент. number round(number) Округляет число по математическим правилам.

Ссылки

dic.academic.ru

XPath Примеры

Давайте попробуем узнать, какой базовый синтаксис XPath, посмотрев на некоторых примерах.

Пример XML документа

Мы будем использовать следующий XML-документ в приведенных ниже примерах.

"Books.xml":

<bookstore>

<book category="COOKING">   <title lang="en">Everyday Italian</title>   <author>Giada De Laurentiis</author>   <year>2005</year>   <price>30.00</price> </book>

<book category="CHILDREN">   <title lang="en">Harry Potter</title>   <author>J K. Rowling</author>   <year>2005</year>   <price>29.99</price> </book>

<book category="WEB">   <title lang="en">XQuery Kick Start</title>   <author>James McGovern</author>   <author>Per Bothner</author>   <author>Kurt Cagle</author>   <author>James Linn</author>   <author>Vaidyanathan Nagarajan</author>   <year>2003</year>   <price>49.99</price> </book>

<book category="WEB">   <title lang="en">Learning XML</title>   <author>Erik T. Ray</author>   <year>2003</year>   <price>39.95</price> </book>

</bookstore>

Просмотр "books.xml" файл в вашем браузере .

Загрузка XML-документа

Использование XMLHttpRequest для загрузки XML-документов поддерживается во всех современных браузерах.

Код для большинства современных браузеров:

var xmlhttp=new XMLHttpRequest()

Код для старых браузеров Microsoft (IE 5 and 6) :

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

Выбор узлов

К сожалению, существуют различные способы борьбы с XPath в Internet Explorer и других браузерах.

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

Internet Explorer использует selectNodes() метод для выбора узлов из документа XML:

xmlDoc.selectNodes( Firefox, Chrome, Opera и Safari используют evaluate() метод для выбора узлов из документа XML: xmlDoc.evaluate( Выбрать все названия

Следующий пример выбирает все узлы заголовков:

Выберите название первой книги

Следующий пример выбирает название первого узла книги под книжным элементом:

Выбрать все цены

Следующий пример выбирает текст из всех ценовых узлов:

Выберите узлы цены с ценой> 35

Следующий пример выбирает все узлы цены с ценой выше, чем 35:

Выберите узлы заголовок с ценой> 35

Следующий пример выбирает все узлы заголовков с ценой выше, чем 35:

www.w3bai.com

Терминология в XPath

Узлы

Всего в XPath выделяется семь типов узлов: элемент, атрибут, текст, пространство имен, инструкция обработки, комментарий и узлы документа.

Документ XML рассматривается, как дерево узлов. Элемент, находящийся в самом верху этого дерева, называется корневым элементом.

Рассмотрим на следующий XML документ:

<?xml version="1.0" encoding="UTF-8"?> <messages> <note> <to>Джону</to> <from>Дженни</from> <heading>Напоминание</heading> <body>Купи хлеба!</body> </note> </messages>

Здесь:

  • <messages> - узел корневого элемента
  • <to>Джону</to> - узел элемента
  • note - узел атрибута

Атомарные значения

Узлы, у которых нет родителей и потомков, называются атомарными значениями.

Пример:

Джону "1"

Элементы данных

Атомарные значения или узлы называются элементами данных.

Отношения узлов

Родитель

У каждого элемента есть один родитель.

В следующем примере элемент note является родителем элементов to, from, heading и body:

<note> <to>Джону</to> <from>Дженни</from> <heading>Напоминание</heading> <body>Купи хлеба!</body> </note>

Прямые потомки

У элемента может быть ноль, один или больше прямых потомков.

В следующем примере элементы to, from, heading и body являются прямыми потомками элемента note:

<note> <to>Джону</to> <from>Дженни</from> <heading>Напоминание</heading> <body>Купи хлеба!</body> </note>

Элементы данных одного уровня

Узлы, у которых один и тот же родитель, являются элементами данных одного уровня.

В следующем примере элементы to, from, heading и body являются элементами данных одного уровня:

<note> <to>Джону</to> <from>Дженни</from> <heading>Напоминание</heading> <body>Купи хлеба!</body> </note>

Предки

Предками называются родители узлов, родители родителей и т.д.

В следующем примере предками элемента to являются элементы note и messages:

<messages> <note> <to>Джону</to> <from>Дженни</from> <heading>Напоминание</heading> <body>Купи хлеба!</body> </note> </messages>

Потомки

Потомками называются прямые потомки узлов, прямые потомки прямых потомков и т. д.

В следующем примере потомками элемента messages являются элементы note, to, from, heading и body:

<messages> <note> <to>Джону</to> <from>Дженни</from> <heading>Напоминание</heading> <body>Купи хлеба!</body> </note> </messages>

msiter.ru