CodeKitHub
Інструменти для коду

Тестер XPath

Останнє оновлення:

XPath — це мова запитів для вибору вузлів з документа XML (або HTML) за допомогою виразів шляху, подібно до того, як шлях до файлу вибирає файл у дереві папок. Цей інструмент дозволяє вставити будь-який XML, написати вираз XPath і одразу побачити, які вузли відповідають — включно з кількістю вузлів, серіалізованим виводом і зрозумілими повідомленнями про помилки для некоректного XML чи неправильного синтаксису XPath. Він працює повністю у вашому браузері, використовуючи вбудований у кожен сучасний браузер нативний рушій `document.evaluate`, тож ніщо з того, що ви вставляєте, ніколи нікуди не завантажується.

Що це за інструмент?

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 і вираз ніколи не залишають ваш браузер.

Як користуватися

  1. Вставте або відредагуйте свій XML (або HTML) у полі введення — зразковий документ книгарні вже заповнений заздалегідь, щоб ви одразу побачили, як це працює.
  2. Введіть вираз XPath у полі виразу або відредагуйте попередньо заповнений приклад.
  3. Натисніть "Evaluate" (або натисніть Enter у полі виразу).
  4. Прочитайте відповідні вузли нижче, з кількістю вгорі; скалярні результати (числа, рядки, логічні значення) показуються безпосередньо.
  5. Якщо 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-селектори одним поглядом

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

МожливістьXPathCSS-селектори
Вибір за тегом/класом/id внизТакТак — і зазвичай швидше
Вибір за видимим/текстовим вмістомТак — `contains(text(),'x')`Ні
Перехід вгору до батьківського/предкового елементаТак — `//div[span]/..`Ні (`:has()` — новіший частковий виняток)
Порівняння значень суміжних елементів (напр., `price>30`)ТакНі
Працює поза браузером (серверні інструменти XML, XSLT)ТакНі — CSS-селектори специфічні для браузера/DOM

Пов'язані інструменти

Працюєте зі структурованими форматами даних? Ці інструменти добре поєднуються з тестуванням XPath.

Форматувальник JSON · Декодер JWT

Часті запитання

Для чого використовується 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()` — того самого рушія, який ваш браузер уже використовує внутрішньо. Ніщо з того, що ви вводите чи вставляєте, ніколи не залишає ваш пристрій.

Схожі інструменти