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()` на браузъра, така че резултатите тук съвпадат с това, което бихте получили от инструментите за разработчици на браузъра или от 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. Кликнете „Изчисли“ (или натиснете 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.

Често задавани въпроси

За какво се използва 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()`, а този инструмент използва точно този нативен механизъм, така че е точен спрямо това, което бихте получили, изпълнявайки същия израз в инструментите за разработчици на браузъра или в 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()` на браузъра ви — същия механизъм, който браузърът ви вече използва вътрешно. Нищо, което напишете или поставите, никога не напуска вашето устройство.