|
|
![]() |
on_der_tek_er@yahoo.com |
XPath bir XML document'ındaki node'ları (element, attbiute ve text node'larını) bulmak ('seçmek') için kullanılan dildir. Bir elemanın altındaki elemanların sayısını, ilk veya son elemanıın index'ini bulma gibi function'lar, belli bir attribute'ye sahip elemanları bulmaya yarayan ifadeler içerir.
Bir element'i seçmek için
/tag/subtag
şeklinde bir ifade yazılır. Örneğin
/person/car
ifadesi person element'inin içerisindeki car elementi demektir.
Sadece / işareti kullanılırsa bir document'ın en tepesi yani root element anlamına gelir.
Bir element'in attributesine erişmek için
/tag/subtag/@name
şeklinde bir ifade kullanılır.
Bir element'in attrbutesi o element'in altında kabul edilir. '@' işareti attribute'yi alt elementlerden ayırmak için kullanılır. '@' kullanılmazsa, yani
/tag/subtag/name
şeklinde ifade edilirse subtag'in altındaki name adlı bir tag seçilir.
Bir nodun altına herhangi bir düzeydeki çocuklarını belirtmek için '//' kullanılır. Örneğin
/person//name
ifadesi
/person/name /person/car/name /person/car/tire/name
node'larını kapsar.
'//*' ifadesi bir document'teki bütün node'ları ifade eder.
İki path ifadesinin bileşim kümesini, yani toplamını verir. Örneğin
/person/car/door | company/bulding/door
ifadesi hem hem arabın kapılarını hem de binanın kapılarını verir.
Bir nodun kendisi demektir. Bu şekilde belli bir işlemden geçen node'un adının bilinmesi gerekmez. Örneğin
./@name
ifadesi bu node'un 'name' adlı attributesi demektir.
Nodun bir üstündeki node demektir. Bir node'un kardeşi (kendisiyle aynı parent'te bulunan) bulmak için
../sibling
şeklinde bir ifade yeterlidir.
XPath'te belli bir kritere uyan node'ları seçmek için kullanılan çeşitli ayıklama yöntemleri vardır. Kriterler '['ve ']' arasında belirtilir.
Bir nodun altında belli biri sıradaki nodu almak için
tag[index]
şeklinde bir ifade kullanılır. Örneğin
/person[3]
ifadesi 3. sıradaki person elementini verir.
Belli bir attribute'nin değerine göre node'ları ayıklamak için
tag[@attribute="value"]
şeklinde bir ifade kullanılır. Örneğin
/person/car[@model='TX']
ifadesi model attribute'sinin değeri TX olan'ları bulur.
Bir attribute'nin adı
tag[@attribute]
biçiminde değer verilmeden belirtilirse, değeri ne olursa olsun o atribute'si bulunan node'ların seçilmesini sağlar. Sadece o attributesi hiç olmayan node'lar dışarda kalır.
'=' dışında !=, <,<=,>,>= gibi karşılaştırma öperatörleri; +,-,*,div ve mod gibi, aritmetik operatörler; and, or gibi boolean operatörler bulunur. Örneğin
/person[@age>18]
ifadesi yaşı 18'den büyük kişileri verir. Daha karmaşık bir ifadelere de kurulabilir
/person[@age>18 and @name="Remzi"]
gibi. Adı "Remzi" olan 18 yaşındakileri ifade eder
XPath'te belli biri node'u bulmak için çeşitli function'lar vardır. Örnekler :
/person[last()] son kişi /person[position()=5] 5. kişi count(/person/[@model='TX']) modeli 'TX' olanların sayısı /person[contains(@name,"AX"] Adında A geçen person'lar
Aynı element için birden fazla [] ifadesi kullanılabilir
tag[ ... ][ ... ]
biçiminde. Burada ayıklama soldan sağ sırayla yapılır. Önce ilk ayıuklamadan sonra kalanlar diğerine tabi tutulur.
/person/[@name="Remzi"][3]
ifadesi adı ahmet olan 3. kişi demektir.
[] operatörleri ters sırada verilirse ifadenin sonucu değişir. Öreğin
/person[3][@name="Remzi"]
3. kişinin adının "Remzi" olması durumunda sonuç döndürür. Aksi taktirde hiç bir eşleşme çıkmaz. 4. Kişinin adının "Remzi" olsa bile sonuç boştur.
Basit bir XML document'i yazalım :
Göster Gizle Kopar Satır Gizle Satır Göster |
1 <?xml version="1.0"> 2 <items> 3 <philosphy> 4 <book id="13" title="The Main Principles Of Philosphy"/> 5 <book id="12" title="The Traditional Turkish Philosphy"/> 6 <book id="43" title="The Great Turkish Thinkers"/> 7 <dictionary title="The Dictionary Of Philosphy"/> 8 </philosphy> 9 <psychology> 10 <book id="14" title="An Introduction To Psycho-Analysis"/> 11 <book id="47" title="The Life Of Freud"/> 12 </psychology> 13 <sociology> 14 <book id="54" title="The Contribution of Ibn Haldun To Sociology"/> 15 <book id="44" title="The Main Characteristics of Turkic Peoples"/> 16 </sociology> 17 <items>
Bu belgeden veri seçmek için aşağıdaki gibi ifadeler yazılabilir:
/items/philosphy[2] Philosphy'de ki ikinci item /items/*/dictionary (Bütün Sözlükler) /items/*/book[@id="12"]/@title Id'si 12 olan kitabın title'ı count(/items/sociology/book) Sociology kitaplarının sayısı /items/psychology[last()] Son psychology kitabı /items/*/[contains(@title,"Turk")] İçerisnde Turk geçen bütün maddeler.
|
|