CodeKitHub
Инструменты для кода

Тестер XPath

Последнее обновление:

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

Что это за инструмент?

XPath (XML Path Language) — стандарт W3C для навигации и выбора узлов — элементов, атрибутов, текста — внутри XML-документа с помощью компактного синтаксиса, похожего на путь, например `//book[price>30]/title` выбирает каждый `<title>`, у соседнего `<price>` которого значение больше 30, в любом месте документа. XPath используется в таблицах стилей 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()` — того же движка, который браузер уже использует внутри себя. Ничего из введённого или вставленного никогда не покидает ваше устройство.

Похожие инструменты