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]