Transcript 6. xpath

http://www.w3schools.com/xpat
h/
 XPath
bir W3C standardıdır
 XPath XML dökümanlarının kısımlarını
seçmek için kullanılan bir sintakstır.
 XPath sorguları XML olarak yazılmazlar
ama genelde XSLT ile yoğun bir şekilde
kullanılır.
 Küçük bir programlama dili gibi
fonksiyonları, testleri ve ifadeleri vardır.
 XPath’in
XML eleman adresi tarif
yaklaşımı işletim sistemlerinin dosya
adresleme yöntemine benzer.
 XPath ifadeleri işletildiğinde tipi düğümseti (XML ağacının bir grup düğümünden
oluşan bir set), boolean, rakam veya
String tipinde bir nesne döndürür.
Adresler
İşletim Sistemi:
XPath:
/ = kök dizin
/kütüphane= kök element
/kütüphane/kitap/abc =
tkütüphane klasörünün
içindeki kitap
klasöründeki abc dosyası
abc = klasördeki abc
adındaki dosya
/kütüphane/kitap/bölüm/kısım =
kütüphanedeki her kitap içindeki
bir bölümün her kısım elementi
. = erişilmekte olan
klasör
.. = bir üst klasör
. = erişilmekte olan
element
.. = erişilmekte olan elementin
/kütüphane/kitaplar/* =
/kütüphane/kitaplar
altındaki tüm dosyalar
kısım = erişilen elementin
çocuğu olan her kısım elementi
ebeveyni
/kütüphane/kitaplar/bölüm/* =
/kütüphane/kitaplar/bölüm
altındaki tüm elementler




/ ile başlayan bir adres dokümanın tepesinden başlayan mutlak bir
adresi temsil eder
• Örnek: /mesajlar/mesaj/başlık/kimden
• Mutlak adresler birden fazla eleman seçebilir
• Tek başına bir / tüm dokümanı temsil eder
A path that does not begin with a / represents a path starting from
the current element
• Örnek: header/from
/ ile başlamayan bir adres şu anda erişilmekte olan elementten
başlayan bir adresi temsil eder
• Örnek: başlık/kimden
// ile başlayan bir adres dokümanın herhangi bir yerinden
başlayabilir
• Örnek: //başlık/kimden xml dosyasındaki başlık elementinin
çocuğu olan bütün kimden elementlerini seçer
• Bu yöntem tün tüm dosyayı arama gerektirdiği için pahalı olabilir


Parantez içindeki bir rakam o sayıya denk gelen belirli bir
elementi seçer (saymaya 1’den başlanır)
• Örnek: /kütüphane/kitap[1], kütüphanedeki ilk kitabı
seçer
• Örnek: //bölüm/kısım[2] XML dokümanındaki her bölüm
elementinin ikinci kısım elementini seçer
• Örnek: //kitap/bölüm[1]/kısım[2]
last() fonksiyonu parantez içinde kullanılınca son çocuğu
seçer
• Örnek: /kütüphane/kitap/bölüm[last()]
• Sondan bir önceki bölüm elementini seçmek için
Örnek: /kütüphane/kitap/bölüm[last()]
 Yıldız
veya asterisk, “wild card” olarak
kullanılır ve bu seviyedeki tüm elementler
anlamına gelir
• Örnek: /kütüphane/kitap/bölüm/* ifadesi kütüphane
içindeki her bir kitap elementinin her bölüm
elementinin tüm çocuklarını seçer
• Örnek: //kitap/* ifadesi her kitap elementinin her
bir çocuğunu seçer (bölümler)
• Örnek: /*/*/*/paragraf ifadesi her tam olarak 3 atası
olan her paragraf elementini seçer
• Örnek: //* ifadesi tüm dokümandaki tüm
elementleri seçer
 Niteliklerin
kendilerini veya belirli
nitelik barındıran elementleri
seçebilirsiniz
• Hatırlatma: bir nitelik isim-değer çifti
barındırır örneğin <bölüm no="5">
• Niteliğin kendisini seçmek için isminin önüne
@ yazılır
• Örnek: @no ifadesi ismi no olan bütün
nitelikleri seçer
• Example: //@* ifadesi dokümanın
içerisindeki tüm nitelikleri seçer
ifadesi no adında bir niteliği
bulunan tüm bölüm elementlerini seçer
 //bölüm[not(@no)] ifadesi no adında bir
niteliği bulunmayan tüm bölüm
elementlerini seçer
 //bölüm[@*] ifadesi bir attribute barındıran
tüm bölüm elementlerini seçer
 //bölüm[not(@*)] ifadesi attribute
barındırmayan tüm bölüm elementlerini
seçer
 //bölüm [@no='3'] ifadesi no adında bir
niteliğinin değeri 3 olan tüm bölüm
elementlerini seçer
 //bölüm[@no]
<?xml version="1.0" encoding="UTF-8"?>
<Kutuphane>
<Kitap id="123">
<İsim>Anna Karenina</İsim>
<Yazar>Lev Tolstoy</Yazar>
<Yayınevi>Can</Yayınevi>
<Yayınyılı>2008</Yayınyılı>
<ISBN>123456789</ISBN>
<Fiyat>35</Fiyat>
</Kitap>
<Kitap id="12">
<İsim>Sinekli Bakkal</İsim>
<Yazar>Halide Edip Adivar</Yazar>
<Yayınevi>Can</Yayınevi>
<Yayınyılı>2010</Yayınyılı>
<ISBN>9750707766</ISBN>
<Fiyat>25</Fiyat>
</Kitap>
<Kitap id="15">
<İsim>Puslu Kitalar Atlasi</İsim>
<Yazar>Ihsan Oktay Anar</Yazar>
<Yayınevi>Iletisim</Yayınevi>
<Yayınyılı>2008</Yayınyılı>
<ISBN>345129876</ISBN>
<Fiyat>18</Fiyat>
</Kitap>
</Kutuphane>
Root
Kutuphane
Kitap
İsim
Yazar
Yayın
evi
Kitap
Yayın
yılı
ISBN
Fiyat
 //Kutuphane/Kitap/Yayınyılı
 //Kutuphane/Kitap/Fiyat
 //Kutuphane/*/Fiyat
 //Yazar
 //ISBN
 /Kutuphane//Fiyat
 //Kutuphane/Kitap/@id
 //Kutuphane/Kitap[Fiyat]
 //Kutuphane/Kitap[Fiyat=18]
 //Kutuphane/Kitap/@id=12
 //Kutuphane/Kitap/Yayınyılı
• <Yayınyılı>2008</Yayınyılı>
• <Yayınyılı>2010</Yayınyılı>
• <Yayınyılı>2008</Yayınyılı>
 //Kutuphane/Kitap/Fiyat
• <Fiyat>35</Fiyat>
• <Fiyat>25</Fiyat>
• <Fiyat>18</Fiyat>
 //Yazar
• <Yazar>Lev Tolstoy</Yazar>
• <Yazar>Halide Edip Adivar</Yazar>
• <Yazar>Ihsan Oktay Anar</Yazar>
 //Kutuphane/Kitap/@id
• id="123"
• id="12"
• id="15"
 //Kutuphane/Kitap[Fiyat=18]
<Kitap id="15">
<İsim>Puslu Kitalar Atlasi</İsim>
<Yazar>Ihsan Oktay Anar</Yazar>
<Yayınevi>Iletisim</Yayınevi>
<Yayınyılı>2008</Yayınyılı>
<ISBN>345129876</ISBN>
<Fiyat>18</Fiyat>
</Kitap>
 //Kutuphane/Kitap[Fiyat<25]
<Kitap id="123">
<İsim>Anna Karenina</İsim>
<Yazar>Lev Tolstoy</Yazar>
<Yayınevi>Can</Yayınevi>
<Yayınyılı>2008</Yayınyılı>
<ISBN>123456789</ISBN>
<Fiyat>35</Fiyat>
</Kitap>
 //Kutuphane/Kitap/Yazar/text()
• Lev Tolstoy
• Halide Edip Adivar
• Ihsan Oktay Anar
 Önceki
örnekler Xpath veri ağacında
aşağıya doğru yürümek için kullanılır.
 Daha kompleks sorgular ve ağaç üzerinde
yukarıya, sağa, sola vs doğru ilerlemek için
eksenler kullanılır
 //Kutuphane/Kitap[2]/self::* - Kendisi
 //Kutuphane/Kitap[2]/preceding::* Önceki
 //Kutuphane/Kitap[2]/following::* - Sonraki
 //Kutuphane/Kitap[2]/ancestor::* Ebeveyni
 //Kutuphane/Kitap[2]/child::* - Çocukları
<kutuphane>
<kitap>
<bolum/>
<bolum>
<kısım>
<paragraf/>
<paragraf/>
</kısım>
</bolum>
<bolum/>
</kitap>
<kitap/>
</kutuphane>

//bolum[2]/self::*

//bolum[2]/preceding::*

//bolum[2]/following::*

//bolum[2]/ancestor::*

//bolum[2]/descendant::*
Kutuphane
ancestor
preceding
bolum[1]
kitap[1]
following
kitap[2]
self
bolum[2]
bolum[3]
kısım[1]
descendant
paragraph[1]
paragraph[2]