Скорочений синтаксис XPath. Приклади xpath-запитів до html Застосування осі following

XPath використовується для навігації за елементами та атрибутами XML-документа. XPath є одним із основних елементів у стандарті XSLT консорціуму W3C.

1 Що таке XPath

Вирази XPath

XPath використовує шляхи для вибору окремих вузлів або набору вузлів у документі XML. Ці вирази дуже схожі на вирази, які ви бачите, коли працюєте з традиційною файловою системою комп'ютера.

Стандартні функції XPath

XPath включає більше 100 вбудованих функцій. Є функції для рядкових та числових значень, дати та часу, порівняння вузлів та маніпулювання QName, управління послідовностями, булевих значень та багато іншого.

XPath використовується в XSLT

XPath є одним із основних елементів у стандарті XSLT. Без знання XPath ви не зможете створювати XSLT-документи.

2 Термінологія XPath

Вузли

У XPath існує сім видів вузлів: елемент, атрибут, текст, простір імен, інструкції обробки, коментарі та вузли документа. XML-документи обробляються як дерев вузлів. Верхній елемент дерева називається кореневим елементом. Подивіться на наступний документ XML:

Harry Potter J. K. Rowling 2005 29.99

Приклад вузлів у документі XML вище:

(кореневий елемент) J. K. Rowling (вузол) lang="en"(атрибут)

Атомарні значення

Атомарні значення є вузлами, які мають дітей чи батьків. Приклад атомарних значень:

J. K. Rowling "en"

Елементи

Елементи – це атомарні значення або вузли.

3 Відносинивузлів

Батько

Кожен елемент та атрибут має одного з батьків. У наступному прикладі елемент "книга" (book) є батьком елементів "назва" (title), "автор" (author), "рік" (year) і "ціна" (price):

Harry Potter J K. Rowling 2005 29.99

Нащадки

Вузли елементів можуть мати нуль, один або більше нащадків. У наступному прикладі елементи "назва", "автор", "рік" і "ціна" - вони всі нащадки елемента книги:

Harry Potter J K. Rowling 2005 29.99

Елементи одного рівня

Це вузли, які мають одного й того самого батька. У наступному прикладі елементи "назва", "автор", "рік" і "ціна" всі є елементами одного рівня:

Harry Potter J K. Rowling 2005 29.99

Пращури

Батько вузла, батько батька вузла тощо. У наступному прикладі предки елемента «назва» (title) – це елементи «книга» (book) та «книгарня» (bookstore):

Harry Potter J K. Rowling 2005 29.99

Нащадки

Діти вузла, діти дітей вузла тощо. У наступному прикладі нащадками елемента «книгарня» є елементи «книга», «назва», «автор», «рік» і «ціна»:

Harry Potter J K. Rowling 2005 29.99

4 Синтаксис XPath

XPath використовує шляхи для вибору вузлів або безлічі вузлів у документі XML. Вузол можна вибрати, слідуючи шляху або кроками. Ми будемо використовувати наступний XML-документ у наведених нижче прикладах.

Harry Potter 29.99 Learning XML 39.95

Вибір вузлів

За допомогою виразів XPath для вибору вузлів у документі XML можна вибрати вузол, дотримуючись шляхів або кроків. Найкорисніші вирази шляху перераховані нижче:

У наведеній нижче таблиці перераховані деякі шляхи виразу та результат виконання виразу:

Вираз XPath Результат
bookstore Вибирає всі вузли з ім'ям "bookstore"
/bookstore Вибирає кореневий елемент книгарні

Примітка:Якщо шлях починається з косої риси (/), він завжди є абсолютним шляхом до елемента!

bookstore/book Вибирає всі елементи "книга" (book), які є нащадками елемента "книгарня" (bookstore)
//book Вибирає всі елементи «книга» незалежно від того, де вони знаходяться у документі
bookstore//book Вибирає всі елементи «книжка», які є нащадком елемента «книгарня», незалежно від того, де вони знаходяться під елементом «книгарня»
//@lang Вибирає всі атрибути, що називаються "lang"

Предикати

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

Вирази XPath Результат
/bookstore/book Вибирає перший елемент "книга", який є нащадком елемента "книгарня".

Примітка:У IE 5,6,7,8,9 перший вузол має індекс , але відповідно до рекомендацій W3C, це . Для вирішення цієї проблеми в IE, задається опція "SelectionLanguage" для XPath:

На JavaScript: xml.setProperty("SelectionLanguage", "XPath");
/bookstore/book Вибирає останній елемент "книга" (book), який є дочірнім елементом елемента "книгарня" (bookstore)
/bookstore/book Вибирає передостанній елемент "книга", який є дочірнім елементом елемента "книгарня"
/bookstore/book Вибір перших двох елементів "книга", які є нащадками елемента "книгарня"
//title[@lang] Вибирає всі елементи "назва" (title), які мають атрибут з ім'ям "lang"
//title[@lang="en"] Вибирає всі елементи "назва", які мають атрибут "мова" зі значенням "en"
/bookstore/book Вибирає всі елементи "книга" після елемента "книгарня", які мають елемент "ціна" зі значенням більше, ніж 35.00
/bookstore/book/title Вибирає всі елементи "назва" книги елемента "книгарня", які мають елемент "ціна" зі значенням більше, ніж 35.00

Вибір невідомих вузлів

Спеціальні символи XPath можна використовувати для вибору невідомих XML вузлів.

У наведеній нижче таблиці ми перерахували деякі шляхи вираження та результати виразів:

Вибір кількох шляхів

За допомогою оператора | у виразах XPath можна вибрати кілька шляхів. У таблиці нижче наведено кілька виразів шляхів та результати їх застосування:

5 Осі XPath

Ми будемо використовувати наступний документ XML далі в прикладі.

Harry Potter 29.99 Learning XML 39.95

Осі визначають набори вузлів щодо поточного вузла.

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

6 Виразишляхи вибірки

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

Абсолютний шлях розташування:

/step/step/...

Відносний шлях вибірки розташування:

Step/step/...

Кожен крок оцінюється по вузлах у поточному наборі вузлів. Крок складається з:

  • вісь (визначає деревоподібний зв'язок між обраними вузлами та поточним вузлом);
  • перевірка вузла (ідентифікує вузол у межах осі);
  • нуль або більше предикатів (для подальшого уточнення обраного набір вузлів)

Синтаксис кроку вибірки такий:

Axisname::nodetest ім'яОсі::перевіркаВузла[предиктор]

приклад Результат
child::book Вибирає всі вузли "книга" (book), які є нащадками поточного вузла
attribute::lang Вибирає атрибут "мова" (lang) поточного вузла
child::* Вибирає всіх нащадків поточного вузла
attribute::* Вибирає всі атрибути поточного сайту
child::text() Вибирає всі текстові вузли поточного вузла
child::node() Вибирає всіх найближчих нащадків поточного вузла
descendant::book Вибирає всіх нащадків поточного вузла
ancestor::book Вибирає всіх предків "книга" (books) поточного вузла
ancestor-or-self::book Вибирає всіх предків "книга" (book) поточного вузла - і поточний вузол, якщо він також "книга" (book)
child::*/child::price Вибирає всі нащадки "ціна" (price) через один рівень від поточного вузла

7 Оператори XPath

Вирази XPath повертають як набір вузлів, рядки, булеві чи числові значення. Нижче наведено список операторів, що використовуються у виразах XPath:

Оператор Опис приклад
| Обчислює два набори вузлів //book | //cd
+ Додавання 6 + 4
- Віднімання 6 - 4
* множення 6 * 4
div Поділ 8 div 4
= Рівність price=9.80
!= Нерівність price!=9.80
< Менше ніж price<9.80
<= Менше або дорівнює price≤9.80
> Більше ніж price>9.80
>= Більше або дорівнює price≤9.80
or Або $9.80 або $9.70
and І price>9.00 and price<9.90
mod Залишок від ділення 5 mod 2

8 Приклади XPath

Давайте розглянемо базовий синтаксис XPath на кількох прикладах. Ми будемо використовувати наступний XML документ "books.xml" у прикладах нижче:

Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J K. Rowling 2005 29.99 XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99 Learning XML Erik T. Ray 2003 39.95

Завантаження документа XML

Використовуйте XMLHttpRequest для завантаження документів XML, який підтримується більшістю сучасних браузерів:

Var xmlhttp=new XMLHttpRequest()

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

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

Вибір вузлів

На жаль, робота з XPath в Internet Explorer та інших браузерах може відрізнятися. У прикладах ми будемо використовувати код, який повинен працювати в більшості браузерів. Internet Explorer використовує метод "selectNodes()" для вибору вузлів XML документа:

XmlDoc.selectNodes(xpath);

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

XmlDoc.evaluate(xpath, xmlDoc, null, XPathResult.ANY_TYPE, null);

Вибір всіх назв

Наступний приклад вибирає всі вузли заголовків:

/bookstore/book/title

Вибір заголовка першої книги

Наступний приклад вибирає заголовок першого вузла "книга" після елемента "книгарня" (bookstore):

/bookstore/book/title

Вибір усіх цін

Наступний приклад вибирає текст усіх вузлів "ціна" (price):

/bookstore/book/price

Вибирає вузли з ціною >35

Наступний приклад вибирає всі вузли з цінами вище 35:

/bookstore/book/price

Вибір вузлів заголовків із ціною >35

Наступний приклад вибирає всі вузли заголовків з ціною вище 35:

/bookstore/book/title

Xpath - це мова запитів до елементів xml або xhtml документа. Також як SQL, xpath є декларативною мовою запитів. Щоб отримати дані, що цікавлять, необхідно всього лише створити запит, що описує ці дані. Усю «чорну» роботу виконає інтерпретатор мови xpath.
Дуже зручно, чи не так? Давайте подивися які можливості пропонує xpath для доступу до сайтів веб-сторінок.

Створення запиту до сайтів веб-сторінок

Пропоную вашій увазі невелику лабораторну роботу, під час якої я продемонструю створення xpath запитів до веб-сторінки. Ви зможете повторити наведені мною запити та, найголовніше, спробуєте виконати свої. Я сподіваюся, що завдяки цьому стаття буде однаково цікава новачкам та програмістам знайомим із xpath по xml.

Для лабораторної нам знадобляться:
- Веб-сторінка xhtml;
- браузер Mozilla Firefox із доповненнями;
- firebug;
- firePath;
(ви можете використовувати будь-який інший браузер з візуальною підтримкою xpath)
- небагато часу.

Як веб-сторінку для проведення експерименту пропоную головну сторінку сайту консорціуму всесвітньої павутини ("http://w3.org"). Саме ця організація розробляє мови xquery(xpath), специфікацію xhtml та багато інших стандартів інтернету.

Завдання
Отримати з xhtml-коду головної сторінки w3.org інформацію про конференції консорціуму за допомогою запитів xpath.
Почнемо написання xpath запитів.
Перший Xpath запит
Відкриваємо закладку Firepath у FireBug, виділяємо із селектором елемент для аналізу, натискаємо: Firepath створив xpath запит до вибраного елемента.

Якщо ви виділили заголовок першої події, то запит буде таким:

Після видалення зайвих індексів запит буде відповідати всім елементам типу заголовок.

Firepath підсвічує елементи, які відповідають запиту. Ви можете побачити, які вузли документа відповідають запиту.

Запит на отримання інформації про місця проведення конференцій:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Так ми отримаємо список спонсорів:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Синтаксис xpath

Повернімося до створених запитів і розберемося в тому, як вони влаштовані.
Розглянемо детально перший запит

У цьому запиті я виділив три частини для показу можливостей xpath. (Поділ на частини уловне)

Перша частина
.// - рекурсивний спуск на нуль чи більше рівнів ієрархії від контексту. У нашому випадку поточний контекст – це корінь документа

Друга частина
* - будь-який елемент,
[@id="w3c_home_upcoming_events"]- Предикат, на основі якого здійснюємо пошук вузла, що має атрибут id рівним "w3c_home_upcoming_events". Ідентифікатори елементів XHTML мають бути унікальними. Тому запит «будь-який елемент з конкретним ID» повинен повернути єдиний вузол, який ми шукаємо.

Ми можемо замінити * на точне ім'я вузла divу цьому запиті
div[@id="w3c_home_upcoming_events"]

Таким чином, ми спускаємось по дереву документа до потрібного нам вузла div[@id="w3c_home_upcoming_events"]. Нас абсолютно не хвилює, з яких вузлів складається DOM-дерево і скільки рівнів ієрархії залишилося вищим.

Третя частина
/ul/li/div/p/a-xpath-шлях до конкретного елемента. Шлях складається з кроків адресації та умови перевірки вузлів (ul, li тощо). Кроки поділяються символом "/" (коса межа).

Колекції xpath
Не завжди вдається отримати доступ до вузла за допомогою предикату або кроків адресації. Дуже часто на одному рівні ієрархії знаходиться наскільки вузлів однакового типу і необхідно вибрати лише перші або тільки другі вузли. Для таких випадків передбачено колекції.

Колекції xpath дозволяють отримати доступ до елемента за його індексом. Індекси відповідають порядку, в якому елементи були представлені у вихідному документі. Порядковий номер у колекціях відраховується від одиниці.

Виходячи з того, що «місце проведення» завжди другий параграф після «назви конференції», отримуємо наступний запит:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p
Де p – другий елемент у наборі кожного вузла списку /ul/li/div.

Аналогічно, список спонсорів ми можемо отримати запитом:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Деякі функції хpath
У хpath існує багато функцій для роботи з елементами всередині колекції. Я наведу лише деякі з них.

last():
Повертає останній елемент колекції.
Запит ul/li/div/p поверне останні параграфи для кожного вузла списку «ul».
Функцію first() не передбачено. Щоб отримати доступ до першого елемента, використовуйте індекс «1».

text():
Повертає тестовий вміст елемента.
.//a – отримуємо всі посилання з текстом "Archive".

position() і mod:
position() - повертає позицію елемента у множині.
mod – залишок від поділу.

Комбінацією цих функцій можемо отримати:
- не парні елементи ul/li
- парні елементи: ul/li

Операції порівняння

  • < - логическое «меньше»
  • > - логічне «більше»
  • <= - логическое «меньше либо равно»
  • >= - логічне «більше чи одно»
ul/li, ul/li - елементи списку починаючи з 3-го номера і навпаки.

Самостійно

Спробуйте отримати:
- парні URL-адреси посилання з лівого меню «Standards»;
- заголовки всіх новин, окрім першої з головної сторінки w3c.org.

Xpath у PHP5

$dom = новий DomDocument(); $dom->loadHTML($HTMLCode); $xpath = новий DomXPath($dom); $_res = $xpath->query(".//*[@id="w3c_home_upcoming_events"]/ul/li/div/p/a"); foreach($_res => $obj) ( echo "URL: ".$obj->getAttribute("href"); echo $obj->nodeValue; )

На закінчення

На простий приклад ми побачили можливості xpath для доступу до вузлів веб-сторінок.
Xpath є галузевим стандартом доступу до елементів xml і xhtml, xslt перетворень.
Ви можете використовувати його для парсингу будь-якої html-сторінки. Якщо вихідний html-код містить значні помилки в розмітці пропустіть його через

Сьогодні ми розглянемо тему використання XPath разом з PHP. Ви побачите приклади, як XPath значно скорочує кількість коду. Розглянемо використання запитів та функцій у XPath.

На початку, надам вам два типи документів: DTD та XML, на прикладі яких ми розглянемо функціонування PHP DOM XPath. Ось як вони виглядають:

A Book An Author Horror chapter one Another Book Another Author Science Fiction chapter one

Основні XPath запити

Простий синтаксис XPath дозволяє звертатися до елементів XML документа. Найбільш простим способом можна прописати шлях до бажаного елементу. Використовуючи XML документ, поданий вище, наступний XPath запит поверне колекцію поточних елементів, що знаходяться в елементі book:

//library/book

Ось так! Два сліші попереду визначають кореневий елемент документа, а один сліш здійснює перехід до дочірнього елемента book. Це просто і швидко, чи не так?

Але що, якщо ви хочете вибрати певний елемент book з безлічі? Припустімо, що вам потрібні книги «Певного автора». XPath запит для цього буде наступним:

//library/book/author/..

Ви можете використовувати text()у квадратних дужках для порівняння значення вузла. Також «/..» означає, що хочемо використовувати батьківський елемент (тобто. повертаємося однією вузол вище).

XPath запити здійснюються за допомогою однієї або двох функцій: query()і evaluate(). Обидві формують запит, але різниця в результаті, що повертається. query() завжди буде повертати DOMNodeList, у відмінності evaluate()буде повертати текстовий результат, якщо це можливо. Наприклад, якщо ваш XPath запит буде повертати кількість книг написаних певним автором, тоді query() поверне порожній DOMNodeList, evaluate() просто поверне число, ви можете використовувати це безпосередньо для отримання даних із вузла.

Код та переваги швидкості XPath

Давайте розглянемо простий приклад, який повертатиме кількість книг, написаних конкретним автором. Перший метод ми розглянемо так, як ми завжди робимо без використання XPath. Зараз ви зрозумієте, як це робиться без XPath і як це простіше робити з XPath.

domDocument->getElementsByTagName("author"); foreach ($elements as $element) ( if ($element->nodeValue == $author) ( $total++; ) ) return $number; )

Наступний метод повертає той самий результат, але використовується XPath для вибору тих книг, які написані певним автором.

domDocument); $result = $xpath->query($query); return $result->length; )

Зверніть увагу, нам не потрібно повторно перевіряти значення кожного елемента, щоб визначити, яким автором написана кожна книга. Але ми можемо спростити код, використовуючи XPath функцію count(), щоб підрахувати вміст елементів цього шляху.

domDocument); return $xpath->evaluate($query); )

Ми можемо отримати інформацію, яку нам потрібно за допомогою одного рядка XPath запиту. Немає потреби створювати безліч PHP фільтрів. Це найпростіший і найшвидший спосіб написати цей функціонал!

Зауважте, що evaluate() використовувався в останньому прикладі. Це тому, що функція count() повертає текстовий результат. Використовуючи query(), повернутися DOMNodeList, але він буде порожнім.

XPath варто використовувати, не тільки тому, що це робить ваш PHP код простіше, це також дає перевагу в швидкості виконання коду. Я помітив, що перша версія була на 30% швидшою в середньому, порівняно з другою. Але третя на 10% швидше за першу. Звичайно, це залежить від вашого сервера та запитів, які використовуєте. Використання XPath у його чистому вигляді, дає найбільші результати у швидкості та простоті написання коду.

XPath Функції

Ось кілька функцій, які можна використовувати з XPath. Також ви знайдете безліч ресурсів, що детально розглядають кожну доступну функцію. Якщо потрібно обчислювати DOMNodeList або порівнювати nodeValue (значення вузла), можна знайти відповідну XPath функцію, яка виключить використання зайвого PHP коду.

Ви вже знаєте це на прикладі count() функції. Давайте скористаємося функцією id() для отримання назв книг із заданими ISBN. Для цього потрібно використовувати наступний вираз:

id("isbn1234 isbn1235")/title

Зауважте, значення, які ви шукаєте, не варто укладати в дужки, тільки розділіть їх пробілами. Також не здумайте вліпити кому:

domDocument); $result = $xpath->query($query); $books = array(); foreach ($result as $node) ( $book = array("title" => $booknode->nodeValue); $books = $book; ) return $books; )

Обробка складних функцій XPath неймовірно проста.

Використання PHP функцій спільно з XPath

Іноді вам потрібно більше функціональності, яку не можуть надати стандартні функції XPath. На щастя, PHP DOM дозволяє взаємодіяти власним функціям PHP з запитами XPath.

Давайте розглянемо приклад, який повертає кількість слів у назві книги. У цій простій функції ми напишемо наступне:

domDocument); $result = $xpath->query($query); $title = $result->item(0)->getElementsByTagName("title") ->item(0)->nodeValue; return str_word_count($title); )

Але ми також можемо включити функцію str_word_count() безпосередньо в XPath запит. Це можна зробити за допомогою кількох кроків. Перш за все нам потрібно зареєструвати namespase з XPath об'єктом. PHP функції в XPath запитах викликаються за допомогою рядка php:functionString, після чого прописується ім'я бажаної функції. Також, namespace більш детально розглядається на http://php.net/xpath. Інші значення namespace будуть видавати помилку. Після цього нам потрібно викликати registerPHPFunctions(). Ця функція повідомляє PHP, що коли йде звернення через namespace "php:", цей виклик оброблятиме саме PHP.

Приблизний синтаксис виклику функцій буде таким:

php:functionString("nameoffunction", arg, arg...)

Давайте сумісне все це разом у наступному прикладі функції getNumberOfWords():

domDocument); //реєструємо php namespace $xpath->registerNamespace("php", "http://php.net/xpath"); //тепер php функції можуть викликатися в xpath запитах $xpath->registerPHPFunctions(); $query = "php:functionString("str_word_count",(//library/book[@isbn = "$isbn"]/title))"; return $xpath->evaluate($query); )

Зауважте, що вам не потрібно викликати XPath функцію text(), щоб отримати текст вузла. Метод registerPHPFunctions() робить це автоматизованим. Хоча наступний приклад рядка коду також буде валідним:

php:functionString("str_word_count",(//library/book[@isbn = "$isbn"]/title))

Реєстрування функцій PHP не обмежене для функцій, які включені в PHP. Ви можете визначити власні функції і використовувати їх всередині XPath. Єдина відмінність у тому, що доведеться використовувати "php:function" замість "php:functionString".

Давайте напишемо функцію, яка буде за межами класу для демонстрації базової функціональності. Функція, яку ми використовуватимемо, повертає книги автора «George Orwell». Вона повинна повертати true для кожного сайту, який ви хочете включити в запит.

nodeValue == "George Orwell"; } !}

Аргумент, який передається у функцію, є масивом елементів DOM. Ця функція проходить по масиву і визначає необхідні елементи, після чого включає їх у DOMNodeList. У цьому прикладі випробовуваний вузол був /book, також ми використовували /author для визначення потрібних елементів.

Тепер ми можемо створити функцію getGeorgeOrwellBooks():

domDocument); $xpath->registerNamespace("php", "http://php.net/xpath"); $xpath->registerPHPFunctions(); $query = "//library/book1"; $result = $xpath->query($query); $books = array(); foreach($result as $node) ( $books = $node->getElementsByTagName("title") ->item(0)->nodeValue; ) return $books; )

Якщо функція compare() статична, тоді вам потрібно внести виправлення в XPath запит:

//library/book

Правду кажучи, вся ця функціональність могла бути реалізована за допомогою чистого XPath коду. Але приклад показує, як можна розширювати XPath запити і робити їх більш комплексними.

На завершення

XPath- це чудовий спосіб скоротити кількість коду та підвищити його обробку, при роботі з XML. Додаткова функціональність PHP DOM дозволяє розширити XPath функції. Це реально корисна штука, якщо ви будете її використовувати і заглиблюватися в специфіку, вам доведеться менше писати коду.


XPath використовує шляхи для вибору вузлів у документі XML або набір вузлів. По вузлу вздовж шляху (шлях) або стадії (кроків) до обраного.

екземпляра XML-документи

Ми будемо використовувати цей XML-документ у наведених нижче прикладах.


Harry Potter
29.99


Learning XML
39.95

Виберіть вузол

XPath використовує шляхи для вибору вузлів у документі XML. Або шляхом через вузол для вибору кроку. Нижче перераховані найбільш корисні вирази шляху:

У наведеній нижче таблиці ми наводимо деякі з шляхів виразу та результат виразу:

вираз Шляхрезультат
Книжковий магазинВиберіть усі дочірні вузли книжкового елемента.
/ Книжковий магазин

Виберіть кореневий елемент книгарні.

Примітка: Якщо шлях починається з косої межі (/), шлях завжди є представником абсолютного шляху до елемента!

книгарня / книгаВиберіть вкладені елементи, які належать до книгарні усі книжкові елементи.
// КнигаВиділити всі книги поделементи, незалежно від їхнього положення в документі.
книгарня // книгаВибирає всі книжкові елементи, які не належать до нащадків книгарні елемента, незалежно від того, в якому положенні вони перебувають у книжковому магазині.
// @ LangВиберіть усі властивості названих Ланг.

Предикат (Предікати)

Предикат використовується, щоб знайти конкретний вузол або вузол, який містить вказане значення.

Предикат вкладається у квадратні дужки.

У наведеній нижче таблиці ми перерахували деякі вирази шляху з предикатами і результат виразу:

вираз Шляхрезультат
/ Книгарня / книгаВиберіть вкладені елементи, які належать першій книжковій книжці.
/ Книгарня / книга [остання ()]Виберіть вкладені елементи, які належать останній книжковий елемент.
/ Книгарня / книга [остання () - 1]Виберіть вкладені елементи, що стосуються взаємної книгарні другого книжкового елемента.
/ Книгарня / книга [становище ()<3] Виберіть перші дві книги елементи книжкового елемента, що належить до поделементів.
// Назва [@lang]Вибрати всі атрибути з ім'ям Ланг має заголовок елемента.
// Заголовок [@ LANG = "анг"]Виділіть всі назви елементів, і ці елементи мають значення атрибута англ.
/bookstore/bookВиділити всі книжкові елементи книжкового елемента, а значення цінового елемента, що має бути більше, ніж 35.00.
/bookstore/book/titleВиберіть усі елементи заголовка книги елементів книжкового елемента, і в якому значення цінового елемента має бути більшим, ніж 35.00.

Виберіть невідомі вузли

XPath групові символи можна використовувати для вибору невідомих елементів XML.

У наведеній нижче таблиці ми перерахували деякі вирази шляху, а також результати цих виразів:

Виберіть кілька шляхів

Використовуючи вираз шляху "|" оператора, ви можете вибрати кілька шляхів.

У наведеній нижче таблиці ми перерахували деякі вирази шляху, а також результати цих виразів.