Ana içeriğe geç

XPath Rehberi: XML Belgelerinde Yol Bulma

**XPath (XML Path Language)**, bir XML belgesindeki düğümleri (nodes) veya nitelikleri (attributes) seçmek, adreslemek ve filtrelemek için kullanılan standart bir sorgu dilidir.

XPath Sözdizimi

  • \\\`/\\\`: Kök elemandan başlayarak doğrudan alt elemanları arar.
  • \\\`//\\\`: Belgenin neresinde olursa olsun eşleşen tüm elemanları derinlemesine arar.
  • \\\`@\\\`: Nitelikleri (attributes) seçmek için kullanılır.
  • \\\`[]\\\`: Filtreleme ve koşul ifadeleri içerir (örneğin belirli bir indeksi veya koşulu sağlayan düğümleri seçmek için).
  • Pratik Örnekler

    Aşağıdaki XML belgesini ele alalım:

    \\`xml

    <store>

    <product category="electronics">

    <title>Laptop</title>

    <price>12000</price>

    </product>

    </store>

    \\`

    Sorgular:

  • Tüm ürün başlıklarını seçer: \\\`//product/title\\\`
  • Sadece "electronics" kategorisindeki ürünleri filtreler: \\\`//product[@category='electronics']\\\`
  • İlk ürünün adını seçer: \\\`/store/product[1]/title\\\`
  • XPath, özellikle XML tabanlı web kazıma (web scraping) ve büyük XML veri ambarlarından veri ayıklama işlerinde vazgeçilmez bir standarttır.

    Konum ve Filtre Mantığı

    Mutlak yol / ile kökten, göreli yol mevcut bağlamdan başlar. // ifadesi bütün alt seviyeleri taradığı için kullanışlı ama geniştir. Köşeli parantez içindeki koşullar düğüm kümesini filtreler; [1] seçimin yapıldığı bağlama göre ilk düğümü ifade eder.

    Uygulamalı İfadeler

  • /catalog/book/title: belirli hiyerarşideki başlıklar
  • //book[@available='true']: niteliğe göre kitaplar
  • //book[price < 100]/title: fiyat koşuluyla başlıklar
  • count(//book): düğüm sayısı
  • Namespace ve Güvenlik

    Namespace kullanan belgelerde prefix eşlemesi sağlamadan yazılan sorgu sonuç döndürmeyebilir. Uygulamanız XPath 1.0, 2.0 veya 3.1 desteklerinden hangisini sunuyor kontrol edin. Kullanıcı kaynaklı XPath ifadelerini sunucuda doğrudan çalıştırmak maliyetli sorgulara veya bilgi sızıntısına neden olabilir; izin verilen bağlamı ve fonksiyonları sınırlandırın.