Тестер XPath

Документ и выражение остаются в этом браузере.

Вставьте XML или HTML объёмом не более 1 000 000 символов. Вычисление выполняется в этом браузере с использованием XPath 1.0.

Абсолютное или относительное выражение XPath 1.0. Префиксы, объявленные в документе, регистрируются автоматически; пространство имён по умолчанию доступно через префикс d.

Писать XPath для скрейпинга или XSLT без живой песочницы значит действовать наугад. Этот тестер принимает ваш XML или HTML в одном поле и выражение в другом, вычисляет XPath 1.0 движком вашего собственного браузера и выводит каждый найденный узел с типом, атрибутами, текстовым содержимым и сериализованной разметкой. Скалярные выражения вроде count(//book) возвращают своё значение напрямую, а префиксы пространств имён, объявленные в документе, регистрируются автоматически. Всё выполняется в вашем браузере: документ никуда не загружается.

Как проверить выражение XPath

  1. 1

    Вставьте XML или HTML

    Автоопределение переключается на нестрогий разбор HTML, когда видит doctype или корневой элемент HTML; режим XML или HTML можно задать и принудительно.

  2. 2

    Введите свой XPath

    Абсолютное (`/library/book`) или относительное (`//div[@class='card']`), любое выражение XPath 1.0.

  3. 3

    Вычислите

    Движок XPath вашего браузера выполняет запрос локально; на сервер ничего не отправляется.

  4. 4

    Изучите результаты

    Каждое совпадение показывает тип узла, атрибуты, усечённый текст и сериализованную разметку; выводится до 200 совпадений.

Основы XPath 1.0

Выражение Что выбирает
/books/book Элементы <book>, дочерние для корня <books>
//book Каждый <book> в любом месте документа
//book[@id='42'] <book> с атрибутом id, равным 42
//book[1] Первый <book> у каждого родителя (не в документе)
(//book)[1] Первый <book> во всём документе
//book[title='1984'] <book>, у которого текст <title> равен «1984»
//book/@id Атрибуты id всех элементов <book>
//book[position() > 1] Все <book>, кроме первого
//book[last()] Последний <book> у каждого родителя

Скалярные выражения тоже работают: count(//book) возвращает число, string(//title) строку, а boolean(//book[@id]) истину или ложь. Тестер показывает эти значения напрямую, а не список узлов.

Распространённые оси помимо child

  • ancestor::, все предки
  • following-sibling::, соседние узлы после текущего
  • preceding-sibling::, соседние узлы до него
  • descendant::, все потомки
  • attribute:: (сокращённо @), атрибуты текущего узла
  • parent:: (сокращённо ..), родительский элемент

Особенности HTML

HTML не является строгим XML, поэтому тестер разбирает его нестрого, HTML-парсером вашего браузера, а не строгим XML-парсером. Режим HTML определяется автоматически по <!DOCTYPE html> или корневому <html>, а селектором режима документа можно принудительно включить любой из режимов. В режиме HTML имена тегов и атрибутов приводятся к нижнему регистру, поэтому пишите XPath строчными буквами: //div[@class], а не //DIV[@CLASS].

Пространства имён

XML с пространствами имён требует регистрации префиксов:

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <item>
    <content:encoded>...</content:encoded>
  </item>
</rss>

Тестер просматривает документ в поисках объявлений xmlns и регистрирует каждый префикс автоматически, так что //content:encoded просто работает. У пространства имён по умолчанию (простого xmlns="...") нет префикса в документе, поэтому тестер привязывает его к префиксу d: элементы <item> в ленте с пространством имён по умолчанию выбираются через //d:item. Зарегистрированные пространства имён выводятся рядом с результатами.

Что этот тестер не вычисляет

Браузеры вычисляют XPath 1.0, тот же диалект, что используют большинство инструментов скрейпинга. Возможности XPath 2.0 и новее, такие как matches(string, regex), tokenize(string, delimiter), выражения for ... return и операторы последовательностей, в него не входят; вы найдёте их в инструментах XSLT 2.0/3.0. XPath 1.0 остаётся самым переносимым вариантом для веб-скрейпинга.

Советы по проверке

  • Начинайте широко и сужайте. Сначала //div, затем //div[@class], затем конкретное значение класса.
  • Проверяйте объявления пространств имён. Большинство ошибок вида «почему мой XPath ничего не возвращает?» связано с пространствами имён; загляните в список зарегистрированных пространств имён.
  • Следите за регистром. XML чувствителен к регистру. Режим HTML приводит имена к нижнему регистру.
  • Проверяйте string() при извлечении текста. //p/text() и string(//p) дают разное, когда внутри есть вложенная разметка.

Часто задаваемые вопросы

Нет, только XPath. Большинство браузеров поддерживают оба варианта через document.querySelectorAll (CSS) и document.evaluate (XPath). Используйте тот, что понятнее для задачи.

При разборе HTML имена тегов и атрибутов приводятся к нижнему регистру. Убедитесь, что ваш XPath написан строчными буквами: //div[@class], а не //DIV[@CLASS]. Проверьте и режим: принудительный XML на небрежном HTML завершается ошибкой разбора, а режим HTML разбирает его нестрого.

Префиксы, объявленные в документе, регистрируются для вашего выражения автоматически. Пространство имён по умолчанию привязывается к префиксу d, поэтому //d:item выбирает элементы <item> в документе с пространством имён по умолчанию. Активные привязки выводятся вместе с результатами.

Нет. Документ и выражение вычисляются движком XPath вашего собственного браузера и не отправляются на наш сервер, не сохраняются и не добавляются в адрес страницы; они существуют только в сеансе этого браузера, чтобы многошаговый режим мог показать ваши результаты.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Генератор цветовой палитры

Создавайте монохромные, аналоговые, комплементарные, триадные или тетрадные палитры из базового HEX-цвета и экспортируйте готовые CSS-переменные.

Генератор случайных букв

Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.