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]