Penguji XPath

Dokumen dan ekspresi Anda tetap berada di browser ini.

Tempel XML atau HTML dengan maksimal 1.000.000 karakter. Evaluasi berjalan di browser ini dengan XPath 1.0.

Ekspresi XPath 1.0 absolut atau relatif. Prefiks yang dideklarasikan dalam dokumen didaftarkan secara otomatis; namespace default tersedia lewat prefiks d.

Menulis XPath untuk scraping atau XSLT hanyalah coba-coba kalau Anda tidak punya tempat uji langsung. Penguji ini menerima XML atau HTML Anda di satu panel dan ekspresi Anda di panel lain, mengevaluasi XPath 1.0 dengan mesin milik browser Anda sendiri, lalu menampilkan setiap node yang cocok beserta jenis, atribut, isi teks, dan markup terserialisasinya. Ekspresi skalar seperti count(//book) langsung mengembalikan nilainya, dan prefiks namespace yang dideklarasikan di dokumen didaftarkan secara otomatis untuk Anda. Semuanya berjalan di browser Anda: dokumen tidak pernah diunggah ke mana pun.

Cara menguji ekspresi XPath

  1. 1

    Tempel XML atau HTML

    Deteksi otomatis beralih ke penguraian HTML yang longgar saat melihat doctype atau akar HTML; Anda juga bisa memaksa mode XML atau HTML.

  2. 2

    Masukkan XPath Anda

    Absolut (`/library/book`) atau relatif (`//div[@class='card']`), ekspresi XPath 1.0 apa pun.

  3. 3

    Evaluasi

    Mesin XPath browser Anda menjalankan kueri secara lokal; tidak ada yang dikirim ke server.

  4. 4

    Periksa hasilnya

    Setiap kecocokan menampilkan jenis node, atribut, teks yang dipangkas, dan markup terserialisasi; hingga 200 kecocokan ditampilkan.

Dasar-dasar XPath 1.0

Ekspresi Yang dicocokkan
/books/book Anak <book> dari akar <books>
//book Setiap <book> di mana pun dalam dokumen
//book[@id='42'] <book> dengan atribut id bernilai 42
//book[1] <book> pertama di tiap induk (bukan di dokumen)
(//book)[1] <book> pertama di seluruh dokumen
//book[title='1984'] <book> yang teks <title>-nya “1984”
//book/@id Atribut id dari semua elemen <book>
//book[position() > 1] Semua <book> kecuali yang pertama
//book[last()] <book> terakhir di tiap induk

Ekspresi skalar juga berfungsi: count(//book) mengembalikan angka, string(//title) sebuah string, dan boolean(//book[@id]) benar atau salah. Penguji menampilkan nilai-nilai itu secara langsung, bukan sebagai daftar node.

Sumbu umum selain child

  • ancestor::, semua leluhur
  • following-sibling::, saudara setelah node saat ini
  • preceding-sibling::, saudara sebelumnya
  • descendant::, semua turunan
  • attribute:: (singkatan @), atribut node saat ini
  • parent:: (singkatan ..), elemen induk

Keunikan HTML

HTML bukan XML yang ketat, jadi penguji mengurainya secara longgar dengan parser HTML browser Anda, bukan parser XML yang ketat. Mode HTML terdeteksi otomatis dari <!DOCTYPE html> atau akar <html>, dan Anda bisa memaksa salah satu mode lewat pemilih mode dokumen. Dalam mode HTML, nama tag dan atribut diubah menjadi huruf kecil, jadi tulis XPath Anda dengan huruf kecil: //div[@class], bukan //DIV[@CLASS].

Namespace

XML dengan namespace membutuhkan pendaftaran prefiks:

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

Penguji memindai dokumen untuk mencari deklarasi xmlns dan mendaftarkan setiap prefiks secara otomatis, sehingga //content:encoded langsung berfungsi. Namespace default (xmlns="..." polos) tidak punya prefiks di dokumen, jadi penguji mengikatnya ke prefiks d: pilih elemen <item> di feed ber-namespace default dengan //d:item. Namespace yang terdaftar ditampilkan di samping hasil.

Yang tidak dievaluasi penguji ini

Browser mengevaluasi XPath 1.0, dialek yang sama dengan yang dipakai sebagian besar perangkat scraping. Fitur XPath 2.0 ke atas, seperti matches(string, regex), tokenize(string, delimiter), ekspresi for ... return, dan operator sekuens, bukan bagian darinya; Anda akan menemukannya di toolchain XSLT 2.0/3.0. XPath 1.0 tetap pilihan paling portabel untuk web scraping.

Kiat pengujian

  • Mulai dari yang luas, lalu persempit. Pertama //div, lalu //div[@class], lalu nilai class yang spesifik.
  • Periksa deklarasi namespace. Sebagian besar masalah “kenapa XPath saya tidak mengembalikan apa-apa?” adalah soal namespace; lihat daftar namespace terdaftar.
  • Perhatikan huruf besar-kecil. XML membedakan huruf besar dan kecil. Mode HTML mengubah nama menjadi huruf kecil.
  • Uji string() saat mengekstrak teks. //p/text() dan string(//p) berbeda ketika ada markup bersarang.

Pertanyaan yang Sering Diajukan

Tidak, hanya XPath. Sebagian besar browser mendukung keduanya lewat document.querySelectorAll (CSS) dan document.evaluate (XPath). Gunakan yang paling jelas untuk tugas Anda.

Penguraian HTML mengubah nama tag dan atribut menjadi huruf kecil. Pastikan XPath Anda memakai huruf kecil: //div[@class], bukan //DIV[@CLASS]. Periksa juga modenya: memaksa XML pada HTML yang berantakan gagal dengan galat penguraian, sedangkan mode HTML menguraikannya secara longgar.

Prefiks yang dideklarasikan di dokumen didaftarkan otomatis untuk ekspresi Anda. Namespace default diikat ke prefiks d, sehingga //d:item memilih elemen <item> di dokumen ber-namespace default. Ikatan yang aktif ditampilkan bersama hasil.

Tidak. Dokumen dan ekspresi dievaluasi oleh mesin XPath milik browser Anda sendiri dan tidak dikirim ke server kami, tidak disimpan, dan tidak ditambahkan ke alamat halaman; keduanya hanya ada di sesi browser ini agar tampilan multi-langkah bisa menunjukkan hasil Anda.

Alat Terkait