İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Onder Teker
on_der_tek_er@yahoo.com

XML'e Giriş 2

XPath

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'

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.

Attribute

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.

'*' Operatörü

// Operatörü

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.

| operatörü

İ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.

. Operatörü

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.

.. Operatörü

Nodun bir üstündeki node demektir. Bir node'un kardeşi (kendisiyle aynı parent'te bulunan) bulmak için

../sibling 
 

şeklinde bir ifade yeterlidir.

SÜZME

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.

Index'le Seçme

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.

Attribute'yle seçmek.

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.

Operatörler

'=' 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

Function'ları

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

Birden falzla [] kullanımı

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.

ÖRNEK

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.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır