XPath-testare

Klistra in XML eller HTML med upp till 1 000 000 tecken. Utvärderingen sker i den här webbläsaren med XPath 1.0.

Ett absolut eller relativt XPath 1.0-uttryck. Prefix som deklareras i dokumentet registreras automatiskt; en standardnamnrymd är tillgänglig under prefixet d.

Att skriva XPath för skrapning eller XSLT blir ren gissningslek utan en levande sandlåda. Den här testaren tar din XML eller HTML i en ruta och ditt uttryck i en annan, utvärderar XPath 1.0 med webbläsarens egen motor och listar varje träffad nod med typ, attribut, textinnehåll och serialiserad uppmärkning. Skalära uttryck som count(//book) returnerar sitt värde direkt, och namnrymdsprefix som deklarerats i dokumentet registreras åt dig. Allt körs i din webbläsare: dokumentet laddas aldrig upp.

Så testar du ett XPath-uttryck

  1. 1

    Klistra in XML eller HTML

    Den automatiska identifieringen växlar till tolerant HTML-tolkning när den ser en HTML-doctype eller HTML-rot; du kan också tvinga XML- eller HTML-läge.

  2. 2

    Ange ditt XPath

    Absolut (`/library/book`) eller relativt (`//div[@class='card']`), vilket XPath 1.0-uttryck som helst.

  3. 3

    Utvärdera

    Webbläsarens XPath-motor kör frågan lokalt; ingenting skickas till någon server.

  4. 4

    Granska resultaten

    Varje träff visar nodtyp, attribut, trimmad text och serialiserad uppmärkning; upp till 200 träffar listas.

Grunderna i XPath 1.0

Uttryck Vad det träffar
/books/book <book>-barn till roten <books>
//book Varje <book> var som helst i dokumentet
//book[@id='42'] <book> med id-attribut lika med 42
//book[1] Första <book> per förälder (inte i dokumentet)
(//book)[1] Första <book> i hela dokumentet
//book[title='1984'] <book> vars <title>-text är “1984”
//book/@id id-attributen hos alla <book>-element
//book[position() > 1] Alla <book> utom det första
//book[last()] Sista <book> per förälder

Skalära uttryck fungerar också: count(//book) returnerar ett tal, string(//title) en sträng och boolean(//book[@id]) sant eller falskt. Testaren visar de värdena direkt i stället för en nodlista.

Vanliga axlar bortom child

  • ancestor::, alla förfäder
  • following-sibling::, syskon efter den aktuella noden
  • preceding-sibling::, syskon före
  • descendant::, alla ättlingar
  • attribute:: (kortform @), den aktuella nodens attribut
  • parent:: (kortform ..), föräldraelementet

HTML:s egenheter

HTML är inte strikt XML, så testaren tolkar det tolerant med webbläsarens HTML-parser i stället för den strikta XML-parsern. HTML-läget identifieras automatiskt utifrån <!DOCTYPE html> eller en <html>-rot, och med väljaren för dokumentläge kan du tvinga fram endera läget. I HTML-läge görs tagg- och attributnamn om till gemener, så skriv ditt XPath med gemener: //div[@class], inte //DIV[@CLASS].

Namnrymder

XML med namnrymder kräver att prefixen registreras:

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

Testaren söker igenom dokumentet efter xmlns-deklarationer och registrerar varje prefix automatiskt, så //content:encoded fungerar direkt. En standardnamnrymd (ett rent xmlns="...") saknar prefix i dokumentet, så testaren binder den till prefixet d: välj <item>-element i ett flöde med standardnamnrymd med //d:item. De registrerade namnrymderna listas bredvid resultaten.

Vad den här testaren inte utvärderar

Webbläsare utvärderar XPath 1.0, samma dialekt som de flesta skrapningsverktyg använder. Funktioner från XPath 2.0 och senare, som matches(string, regex), tokenize(string, delimiter), for ... return-uttryck och sekvensoperatorer, ingår inte; dem hittar du i XSLT 2.0/3.0-verktygskedjor. XPath 1.0 förblir det mest portabla valet för webbskrapning.

Testtips

  • Börja brett och snäva in. Först //div, sedan //div[@class], sedan det specifika klassvärdet.
  • Kontrollera namnrymdsdeklarationerna. De flesta “varför returnerar mitt XPath ingenting?”-buggar är namnrymder; titta i listan över registrerade namnrymder.
  • Tänk på skiftläget. XML är skiftlägeskänsligt. HTML-läget gör namn till gemener.
  • Testa string() när du extraherar text. //p/text() och string(//p) skiljer sig åt när det finns nästlad uppmärkning.

Vanliga frågor

Nej, bara XPath. De flesta webbläsare stöder båda via document.querySelectorAll (CSS) och document.evaluate (XPath). Använd det som är tydligast för uppgiften.

HTML-tolkningen gör tagg- och attributnamn till gemener. Se till att ditt XPath använder gemener: //div[@class], inte //DIV[@CLASS]. Kontrollera också läget: att tvinga XML på slarvig HTML misslyckas med ett tolkningsfel, medan HTML-läget tolkar den tolerant.

Prefix som deklarerats i dokumentet registreras automatiskt för ditt uttryck. En standardnamnrymd binds till prefixet d, så //d:item väljer <item>-element i ett dokument med standardnamnrymd. De aktiva bindningarna listas med resultaten.

Nej. Dokumentet och uttrycket utvärderas av webbläsarens egen XPath-motor och skickas inte till vår server, sparas inte och läggs inte till i sidans adress; de finns bara i den här webbläsarsessionen så att flerstegsvyn kan visa dina resultat.

Relaterade verktyg