Що це за інструмент?
XPath (XML Path Language) — це стандарт W3C для навігації та вибору вузлів — елементів, атрибутів, тексту — всередині документа XML за допомогою компактного синтаксису, схожого на шлях, наприклад, `//book[price>30]/title` вибирає кожен `<title>`, суміжний елемент якого `<price>` більший за 30, будь-де в документі. Його використовують таблиці стилів XSLT, інструменти валідації XML, веб-скрапери, фреймворки для автоматизації браузера (Selenium, Playwright) та XML-бібліотеки багатьох мов програмування.
Поточна версія, реалізована кожним основним браузером — Chrome, Firefox, Safari, Edge — це XPath 1.0, оригінальна рекомендація W3C 1999 року. Цей інструмент використовує саме той самий нативний рушій через API `document.evaluate()` браузера, тому результати тут збігаються з тим, що ви отримали б із DevTools браузера або будь-якого JavaScript, що виконується в браузері. Він не реалізує пізніші специфікації XPath 2.0/3.0/3.1 (які додають такі функції, як `for`, послідовності та зіставлення з регулярними виразами) — дивіться поширені запитання, щоб дізнатися, що це означає на практиці.
Вираз може повернути один із двох типів результату: набір вузлів (нуль або більше відповідних елементів, атрибутів чи текстових вузлів, які цей інструмент серіалізує та перелічує по одному в рядку разом із кількістю), або скалярне значення — число, рядок чи логічне значення — коли сам вираз обчислює значення, наприклад `count(//book)` або `//book[1]/title = 'Dune'`.
Навіщо його використовувати?
- Налагодьте вираз XPath перед тим, як жорстко закодувати його у веб-скрапер, тест Selenium/Playwright чи таблицю стилів XSLT.
- Швидко перевірте, чи вибирає заданий XPath той вузол, який ви очікуєте, зі справжнього зразка XML/HTML.
- Побачте точну кількість збігів і серіалізований вивід замість того, щоб здогадуватися за кодом.
- Отримуйте миттєві, зрозумілі помилки для некоректного XML чи неправильного синтаксису XPath замість незрозумілого стека викликів.
- 100% на стороні клієнта: ваш XML і вираз ніколи не залишають ваш браузер.
Як користуватися
- Вставте або відредагуйте свій XML (або HTML) у полі введення — зразковий документ книгарні вже заповнений заздалегідь, щоб ви одразу побачили, як це працює.
- Введіть вираз XPath у полі виразу або відредагуйте попередньо заповнений приклад.
- Натисніть "Evaluate" (або натисніть Enter у полі виразу).
- Прочитайте відповідні вузли нижче, з кількістю вгорі; скалярні результати (числа, рядки, логічні значення) показуються безпосередньо.
- Якщо XML або вираз недійсні, конкретне повідомлення про помилку замінює результати.
Приклад
Введення
XML:
<bookstore>
<book><title>The Great Gatsby</title><price>12.99</price></book>
<book><title>Learning XPath</title><price>34.50</price></book>
<book><title>Dune</title><price>45.00</price></book>
</bookstore>
XPath: //book[price>30]/titleРезультат
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Лише 2 з 3 книг мають ціну вище 30, тому повертаються рівно 2 елементи <title> — третя книга (Gatsby, $12.99) правильно виключена.
XPath і CSS-селектори одним поглядом
Обидві мови вибирають вузли з документа, але вирішують різні завдання. Використовуйте цю таблицю, щоб обрати правильний інструмент для конкретного вибору.
| Можливість | XPath | CSS-селектори |
|---|---|---|
| Вибір за тегом/класом/id вниз | Так | Так — і зазвичай швидше |
| Вибір за видимим/текстовим вмістом | Так — `contains(text(),'x')` | Ні |
| Перехід вгору до батьківського/предкового елемента | Так — `//div[span]/..` | Ні (`:has()` — новіший частковий виняток) |
| Порівняння значень суміжних елементів (напр., `price>30`) | Так | Ні |
| Працює поза браузером (серверні інструменти XML, XSLT) | Так | Ні — CSS-селектори специфічні для браузера/DOM |
Пов'язані інструменти
Працюєте зі структурованими форматами даних? Ці інструменти добре поєднуються з тестуванням XPath.
Часті запитання
Для чого використовується XPath?
XPath вибирає вузли — елементи, атрибути чи текст — з документа XML або HTML за допомогою синтаксису шляху. Це мова вибору, що лежить в основі трансформацій XSLT, багатьох валідаторів XML, і вона широко використовується у веб-скрапінгу та автоматизації тестування браузера (Selenium, Playwright, Cypress) для пошуку елементів на сторінці, особливо коли самі CSS-селектори не можуть виразити потрібну умову.
XPath чи CSS-селектори — що використовувати?
Вони перетинаються, але не є еквівалентними. XPath може вибрати батьківський елемент на основі вмісту дочірнього (`//div[span='Total']`), переходити вгору до предків і вибирати за видимим текстом (`//button[contains(text(),'Submit')]`) — CSS-селектори не можуть рухатися вгору деревом і взагалі не можуть зіставляти за текстовим вмістом. Якщо ви просто вибираєте за тегом, класом чи ID, рухаючись вниз документом, CSS-селектори простіше писати, і вони зазвичай оцінюються швидше. Звертайтеся до XPath саме тоді, коли вам потрібно "вибрати батьківський елемент цього тексту" або "вибрати за тим, що каже елемент", а не лише за тим, як він позначений тегом чи класом.
Чи підтримує цей інструмент функції XPath 2.0 або 3.0?
Ні — як і жоден браузер. Браузери реалізують XPath 1.0 (рекомендацію W3C 1999 року) через `document.evaluate()`, і цей інструмент використовує саме той самий нативний рушій, тому він точно відповідає тому, що ви отримали б, виконавши той самий вираз у DevTools браузера чи в JavaScript. Функції та можливості, представлені в XPath 2.0/3.0/3.1 (такі як вирази `for`, послідовності чи `matches()` з регулярними виразами), недоступні — тут працюють лише функції 1.0, такі як `contains()`, `starts-with()`, `substring()`, `count()`, `position()` і `last()`.
Які поширені вирази XPath варто знати?
`//tag` вибирає кожен `<tag>` будь-де в документі. `//tag[@attr='value']` вибирає елементи `<tag>`, атрибут `attr` яких дорівнює `value`. `//tag[contains(text(),'x')]` вибирає елементи `<tag>`, прямий текст яких містить `x`. `//tag[1]` вибирає перший суміжний елемент `<tag>` у кожному батьківському елементі. `//parent/child` вибирає елементи `<child>`, які є прямими дочірніми елементами `<parent>`. `count(//tag)` повертає число замість набору вузлів.
Чи обробляє цей інструмент простори імен XML?
Чисто підтримується лише звичайний випадок без простору імен, що охоплює переважну більшість вручну написаного чи скрапленого XML/HTML. Якщо ваш документ оголошує простір імен XML (наприклад, `xmlns="..."` на кореневому елементі), `document.evaluate` вимагає функцію-резолвер, що враховує простори імен і зіставляє префікси з URI, а цей простий інструмент цього не налаштовує — вирази до XML із простором імен можуть повертати нуль збігів, навіть якщо вони виглядають правильними. Це відоме обмеження, а не помилка: видаліть оголошення простору імен зі свого зразка або використовуйте функцію local-name() як обхідний шлях (наприклад, `//*[local-name()='title']`).
Чи надсилається мій XML або вираз XPath на сервер?
Ні. Все виконується локально за допомогою вбудованих у ваш браузер `DOMParser` і `document.evaluate()` — того самого рушія, який ваш браузер уже використовує внутрішньо. Ніщо з того, що ви вводите чи вставляєте, ніколи не залишає ваш пристрій.