XPath, DOM üzerinde sorgulama yapmayı sağlayan bir dildir (XML Path Language). XML içinde istediğiniz yolu bulabilmek için geliştirilmiştir ve 1999'dan beri kullanılmaktadır.

Ufak tefek revizyonlar yayınlanmaktadır. Arkasında her zamanki gibi W3C bulunmaktadır. Detaylı incelemek için W3 XPath yolunu takip ederek inceleyebilirsiniz.

XPath, XPointer, XSLT ve diğer XML teknolojileri kullanılarak tasarlanmıştır.

XPath yazarken root eleman, çocuk eleman vs. gibi kavramları öğrenmek için XML Giriş incelemenizi tavsiye ederim.

Daha önce kullandığımız kutuphane.xml üzerinden devam edeceğiz. Hatırlamak gerekirse;

<kitaplar>
	<kitap isbn="9759954949">
		<adi>Yunus Emre Divanı</adi>
		<yazar gorev="Derleyici">Selim Yağmur</yazar>
		<dil>Türkçe</dil>
		<baski>8</baski>
		<tarih>
			<yil>2014</yil>
			<ay>04</ay>
			<gun>01</gun>
		</tarih>
	</kitap>
	<kitap isbn="9753386203">
		<adi>Risaletü'n-Nushiyye Yunus Emre</adi>
		<yazar gorev="Çevirmen">Prof. Dr. Umay Türkeş Günay</yazar>
		<dil>Türkçe</dil>
		<baski>3</baski>
		<tarih>
			<yil>2009</yil>
			<ay>01</ay>
			<gun>01</gun>
		</tarih>
	</kitap>
</kitaplar>

Şimdi XML'den yola çıkarak kitap elemanlarını bir değişkene aktarıp buradan sadece başlıkları listeleyelim.

<?php
$xml = simplexml_load_file("kutuphane.xml"); // kutuphane.xml'i değişkene aktarıyoruz
$sonuclar = $xml->xpath('kitap'); // kitap elemanına sahip bütün elemanları sonuclar değişkenine atadık.
foreach ($sonuclar as $key => $value) {
echo $value->adi; // kitap elemanlarının altındaki adi elemanının değerini ekrana yazdırıyoruz
}
?>
// Ekran Çıktısı
Yunus Emre Divanı
Risaletü'n-Nushiyye Yunus Emre

Yani xpath('eleman') şeklinde kullandığımızda, o elemanları getiriyor. Şimdi diğer örneğimiz xpath('/eleman') şeklinde kullanımda ise full path olarak adlandırılan, yani kökten hedef elemana kadar sıralı bir şekilde yazmanız gereken yapıyı kullanıyoruz.

<?php
$xml = simplexml_load_file("kutuphane.xml"); // kutuphane.xml'i değişkene aktarıyoruz
$sonuclar = $xml->xpath('/kitaplar/kitap'); // kitaplar kökünün altındaki kitap elemanına sahip bütün elemanları sonuclar değişkenine atadık.
foreach ($sonuclar as $key => $value) {
echo $value->adi; // kitap elemanlarının altındaki adi elemanının değerini ekrana yazdırıyoruz
}
?>
// Ekran Çıktısı
Yunus Emre Divanı
Risaletü'n-Nushiyye Yunus Emre

Yine aynı sonucu aldık yukarıda görmüş olduğunuz gibi.