Tester XPath

Twój dokument i wyrażenie pozostają w tej przeglądarce.

Wklej kod XML lub HTML zawierający do 1 000 000 znaków. Obliczanie odbywa się w tej przeglądarce z użyciem XPath 1.0.

Bezwzględne lub względne wyrażenie XPath 1.0. Prefiksy zadeklarowane w dokumencie są rejestrowane automatycznie; domyślna przestrzeń nazw jest dostępna pod prefiksem d.

Pisanie XPath do scrapingu lub XSLT to zgadywanie na ślepo, jeśli nie masz podręcznego środowiska testowego. Ten tester przyjmuje Twój XML lub HTML w jednym panelu, a wyrażenie w drugim, wykonuje XPath 1.0 silnikiem Twojej własnej przeglądarki i wypisuje każdy dopasowany węzeł wraz z rodzajem, atrybutami, tekstem i zserializowanymi znacznikami. Wyrażenia skalarne, takie jak count(//book), zwracają wartość bezpośrednio, a prefiksy przestrzeni nazw zadeklarowane w dokumencie są rejestrowane automatycznie. Wszystko działa w Twojej przeglądarce: dokument nigdy nie jest nigdzie wysyłany.

Jak przetestować wyrażenie XPath

  1. 1

    Wklej XML lub HTML

    Automatyczne wykrywanie przełącza się na łagodne parsowanie HTML, gdy zobaczy doctype lub korzeń HTML; możesz też wymusić tryb XML lub HTML.

  2. 2

    Wpisz swój XPath

    Bezwzględne (`/library/book`) lub względne (`//div[@class='card']`), dowolne wyrażenie XPath 1.0.

  3. 3

    Wykonaj

    Silnik XPath Twojej przeglądarki wykonuje zapytanie lokalnie; nic nie jest wysyłane na żaden serwer.

  4. 4

    Przejrzyj wyniki

    Każde dopasowanie pokazuje rodzaj węzła, atrybuty, przycięty tekst i zserializowane znaczniki; wyświetlanych jest do 200 dopasowań.

Podstawy XPath 1.0

Wyrażenie Co dopasowuje
/books/book Elementy <book> będące dziećmi korzenia <books>
//book Każdy <book> w dowolnym miejscu dokumentu
//book[@id='42'] <book> z atrybutem id równym 42
//book[1] Pierwszy <book> u każdego rodzica (nie w dok.)
(//book)[1] Pierwszy <book> w całym dokumencie
//book[title='1984'] <book>, którego tekst <title> to „1984“
//book/@id Atrybuty id wszystkich elementów <book>
//book[position() > 1] Wszystkie <book> poza pierwszym
//book[last()] Ostatni <book> u każdego rodzica

Wyrażenia skalarne też działają: count(//book) zwraca liczbę, string(//title) łańcuch znaków, a boolean(//book[@id]) prawdę lub fałsz. Tester pokazuje te wartości bezpośrednio, zamiast listy węzłów.

Popularne osie poza child

  • ancestor::, wszyscy przodkowie
  • following-sibling::, rodzeństwo za bieżącym węzłem
  • preceding-sibling::, rodzeństwo przed nim
  • descendant::, wszyscy potomkowie
  • attribute:: (skrót @), atrybuty bieżącego węzła
  • parent:: (skrót ..), element nadrzędny

Osobliwości HTML

HTML nie jest ścisłym XML, więc tester parsuje go łagodnie parserem HTML Twojej przeglądarki zamiast ścisłym parserem XML. Tryb HTML jest wykrywany automatycznie po <!DOCTYPE html> lub korzeniu <html>, a selektorem trybu dokumentu możesz wymusić dowolny z trybów. W trybie HTML nazwy znaczników i atrybutów są zapisywane małymi literami, więc pisz XPath małymi literami: //div[@class], nie //DIV[@CLASS].

Przestrzenie nazw

XML z przestrzeniami nazw wymaga rejestracji prefiksów:

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

Tester przeszukuje dokument pod kątem deklaracji xmlns i rejestruje każdy prefiks automatycznie, więc //content:encoded po prostu działa. Domyślna przestrzeń nazw (samo xmlns="...") nie ma prefiksu w dokumencie, dlatego tester wiąże ją z prefiksem d: elementy <item> w kanale z domyślną przestrzenią nazw wybierzesz przez //d:item. Zarejestrowane przestrzenie nazw są wypisane obok wyników.

Czego ten tester nie wykonuje

Przeglądarki wykonują XPath 1.0, czyli ten sam dialekt, którego używa większość narzędzi do scrapingu. Funkcje z XPath 2.0 i nowszych, takie jak matches(string, regex), tokenize(string, delimiter), wyrażenia for ... return i operatory sekwencji, nie należą do niego; znajdziesz je w narzędziach XSLT 2.0/3.0. XPath 1.0 pozostaje najbardziej przenośnym wyborem do web scrapingu.

Wskazówki do testowania

  • Zacznij szeroko i zawężaj. Najpierw //div, potem //div[@class], na końcu konkretna wartość klasy.
  • Sprawdź deklaracje przestrzeni nazw. Większość błędów typu „czemu mój XPath nic nie zwraca?“ to przestrzenie nazw; zajrzyj do listy zarejestrowanych przestrzeni nazw.
  • Uważaj na wielkość liter. XML rozróżnia wielkość liter. Tryb HTML zapisuje nazwy małymi literami.
  • Testuj string() przy wyciąganiu tekstu. //p/text() i string(//p) różnią się, gdy w środku są zagnieżdżone znaczniki.

Najczęściej zadawane pytania

Nie, tylko XPath. Większość przeglądarek obsługuje oba przez document.querySelectorAll (CSS) i document.evaluate (XPath). Używaj tego, co jest czytelniejsze dla danego zadania.

Parsowanie HTML zapisuje nazwy znaczników i atrybutów małymi literami. Upewnij się, że Twój XPath używa małych liter: //div[@class], nie //DIV[@CLASS]. Sprawdź też tryb: wymuszenie XML na niechlujnym HTML kończy się błędem parsowania, a tryb HTML parsuje go łagodnie.

Prefiksy zadeklarowane w dokumencie są rejestrowane automatycznie dla Twojego wyrażenia. Domyślna przestrzeń nazw jest wiązana z prefiksem d, więc //d:item wybiera elementy <item> w dokumencie z domyślną przestrzenią nazw. Aktywne powiązania są wypisane przy wynikach.

Nie. Dokument i wyrażenie są wykonywane przez silnik XPath Twojej własnej przeglądarki i nie są wysyłane na nasz serwer, zapisywane ani dodawane do adresu strony; istnieją tylko w sesji tej przeglądarki, aby widok wieloetapowy mógł pokazać Twoje wyniki.

Powiązane narzędzia