araç köşesi

XPath Sorgu Test Aracı

XPath 1.0 ifadesini yapıştırdığınız XML üzerinde deneyin; eşleşen öğeleri, öznitelikleri ya da count() sonucunu görün

Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.

Nasıl çalışır?

XPath, bir XML belgesinin içinden öğe, öznitelik ya da metin seçmek için kullanılan ifade dilidir; Selenium testleri, XSLT dönüşümleri ve e-Fatura gibi XML dosyalarından veri çeken programlar bu dili kullanır. XML'i sol panele yapıştırın ve ifadeyi yazın; sonuç yazdıkça sağ panelde güncellenir. Örnek belgede //kitap[fiyat<100]/baslik fiyatı 100'ün altındaki iki kitabın başlığını verir: Kürk Mantolu Madonna ve Semaver. Eşleşen her düğüm ayrı satırda yazılır: öğe XML olarak, öznitelik ad="değer" olarak, text() ile seçilen metin düz metin olarak. count(//kitap) gibi sayı, string() gibi metin ya da //yil=1943 gibi doğru/yanlış döndüren ifadelerde tek değer görünür ve alttaki not sonucun türünü söyler. Belgede xmlns:cbc gibi ad alanı önekleri varsa aynı önekle yazabilirsiniz (//cbc:ID). XML bozuksa sorunun satır ve sütunu yazılır.

Bu araç xpath sorgu, xpath tester, xpath online, xpath evaluator aramalarıyla da biliniyor.

XPath nedir?

XPath (XML Path Language), XML belgesindeki düğümleri yol ifadesiyle seçen W3C standardıdır. /kitapci/kitap gibi bir yol öğeleri, @kategori öznitelikleri, text() metni seçer; köşeli parantezdeki koşul sonucu süzer. XSLT, XQuery, Selenium ve pek çok XML kütüphanesi XPath kullanır; tarayıcılar 1999'da yayımlanan 1.0 sürümünü destekler.

XML ad alanı nedir?

Ad alanı (namespace), aynı adı taşıyan öğelerin hangi sözlüğe ait olduğunu bir adresle belirtir: xmlns:cbc="urn:..." bildirimi, cbc: önekli öğelerin o adrese bağlı olduğunu söyler. e-Fatura (UBL) ve SOAP belgeleri ad alanı yoğundur. XPath'te öğe adı ile birlikte ad alanı da eşleşmelidir; bu yüzden önekler ifadede de yazılır.

XPath ile CSS seçici arasındaki fark nedir?

CSS seçici (div.urun > a) yalnız öğeleri seçer ve belgede aşağı doğru ilerler; tarayıcıda stil vermek ve Selenium'da öğe bulmak için yeterince hızlıdır. XPath ise öznitelik ve metin düğümü de seçebilir, üst öğeye (..) ve kardeşlere dönebilir, metne göre süzebilir (//a[text()='Sepete ekle']) ve count(), sum() gibi hesaplar yapabilir. XML verisinden değer çekiyorsanız ya da öğeyi metnine göre bulmanız gerekiyorsa XPath, yalnız HTML'de öğe seçecekseniz CSS seçici daha kısadır.

Sık kullanılan XPath ifadeleri (örnek XML ile)

Aşağıdaki ifadeleri sayfadaki kitapçı örneği üzerinde doğrudan deneyebilirsiniz. Tek eğik çizgi bir alt seviyeye, çift eğik çizgi her derinliğe bakar; köşeli parantez koşul, @ öznitelik demektir.

  • //baslik → üç başlık öğesi
  • //kitap[@kategori='roman']/yazar → iki romanın yazarı
  • //kitap[fiyat<100]/baslik/text() → yalnız başlık metinleri
  • /kitapci/kitap[last()]/baslik → son kitabın başlığı (Semaver)
  • count(//kitap) → 3; sum(//fiyat) → toplam fiyat
  • //baslik/@dil → dil öznitelikleri (dil="tr")

Ad alanları ve dürüst sınırlar

Önekli ad alanları (xmlns:cbc="...") belgedeki bildirimden okunur ve ifadede aynı önekle kullanılır. Öneksiz varsayılan ad alanı (xmlns="...") ise XPath 1.0'ın bilinen tuzağıdır: //kitap hiçbir şey bulmaz. Araç bu durumda varsayılan ad alanını d: önekine bağlar; //d:kitap ya da //*[local-name()='kitap'] yazın. Eşleşme çıkmazsa alttaki not bunu hatırlatır.

Araç XPath 1.0 çalıştırır, tarayıcıların kendi XPath desteği de bu sürümdür. XPath 2.0 ve 3.1 işlevleri (matches, lower-case, tokenize, tarih işlevleri) yoktur; yazarsanız hangi işlevin bulunmadığı söylenir. Yapıştırılan metin iyi biçimli XML olmalıdır: kapanmayan <br> ya da tırnaksız öznitelik taşıyan sıradan HTML hata verir. Canlı bir web sayfasında XPath denemek için tarayıcının geliştirici araçlarındaki $x("//a") komutunu kullanabilirsiniz.

Sık sorulanlar

XPath ifadesi nasıl test edilir?

XML'i bu sayfanın sol paneline yapıştırın ve ifadeyi XPath kutusuna yazın. Eşleşen öğeler sağda anında görünür, altta kaç düğüm eşleştiği yazar. İfadede yazım hatası varsa ya da XPath 1.0'da olmayan bir işlev kullandıysanız araç bunu açıkça söyler.

// ile / arasındaki fark nedir?

Tek eğik çizgi bulunduğu yerin doğrudan çocuğuna bakar: /kitapci/kitap yalnız kökün altındaki kitap öğelerini seçer. Çift eğik çizgi her derinlikte arar: //yazar belgenin neresinde olursa olsun bütün yazar öğelerini bulur. Belgenin yapısını tam bilmiyorsanız // ile başlayın.

Ad alanlı XML'de XPath neden sonuç vermiyor?

Belge xmlns="..." ile varsayılan bir ad alanı tanımlıyorsa, XPath 1.0 kuralına göre öneksiz //kitap o ad alanındaki öğeleri görmez. Bu araçta //d:kitap yazın ya da ad alanından bağımsız //*[local-name()='kitap'] kullanın. xmlns:cbc gibi önekli ad alanlarında belgedeki öneki olduğu gibi yazmanız yeterlidir.

XML'im bir sunucuya gönderiliyor mu?

Hayır. XML'in okunması ve XPath ifadesinin çalıştırılması tamamen tarayıcınızda yapılır; fatura ya da müşteri bilgisi içeren bir belgeyi güvenle deneyebilirsiniz.