XPath Expression

Merhaba arkadaşlar, bu yazımda XPath Expression konusuna değinmeye çalışacağım. Hatırlamak gerekirse XPath, xml dosyası içerisinde hareket etmeye ve aradığımız node yada node’lara ulaşmayı sağlamaktaydı ve XSLT için önemli ve gerekliydi. XSL dosyaları oluşturmak için öncesinde XPath bilinmesi gereklidir. Xml içerisinde dolaşmayı XPath expression ile gerçekleştirmekteyiz.

XPath Expression

Kullanmış olduğum ve önemli gördüğüm expressionlara örnek bir xml üzerinden değinmeye çalışacağım.

Employee.xml

Yukarıdaki örnek xml üzerinden expressionlara bakalım;

  1. Expression “/” ile root elementi seçebiliriz. Örnek xml’de kökteki employees seçilecektir.
  2. Expression “//” ile  derinliği ne olursa olsun istenen node seçilir. //name ile farklı node’lar içerisinde yer almasına rağmen ve örnekte yok ama derinlikleri farklı olan tüm name node’u seçilecektir.
  3. Expression “.” ile üzerinde bulunan node’un değeri seçilir. id = 1 olan employee üzerindeki name node için “.” değeri Alican olucaktır.
  4. Expression “@” ile node içindeki inline attribute’a erişilir. //@id ile derinliği farketmeksizin tüm id’lere erişilir. Üzerinde matematiksel işlem de yapılabilir. Örn; //@id=”1″  gibi.

Predicates

Predicates ile özel node’lara yada özel content içeren node’lara erişebiliriz. Örnekle bakalım;

  1. /employees/employee[2] expression ile name attribute “Abdullah” olan node’a erişebiliriz. Başlangıç index 1’dir.
  2. /employees/employee[last()] expression ile employees node içerisindeki son employee node’una erişilir. Sondan bir önceki için ise last() – 1 yapılabilir. last() fonksiyonu hazır fonksiyonlardan biridir ve sayısal bir değer döndürür.
  3. Yine pozisyon olarak da işlem yapabiliriz. /employees/employee[position()>1] ile employees içerisindeki ilk employee hariç diğer employee node’ları seçilebilir.
  4. /employees/employee[@id] expression ile employee içerisindeki id’lere erişebiliriz. id attribute olmayan node bu expression sonucuna dahil olamaz.
  5. Logic operasyon da yapabiliriz /employees/employee[@id > 1] ile id attribute değeri var olan ve 1’den büyük olan node’lar sonuca dahil edilir.
  6. Yine attribute olmasa da node olarak da predicates kullanabiliriz; /employees/employee[name = ‘Alican’] ile ilk node seçilecektir örnek xml’de.
  7. Predicates’ten sonra yine expressiona devam edebiliriz.
  8. /employees/employee[@id > 1] /name id değeri 1’den büyük olan employee node’ların name node’larını getirir. SQL sorgusu gibi oldu ama öyle

Bu expressionlar şimdi havada kalıyor gibi görünse de xsl dosyaları oluşturma kısımlarına geçtiğimizde bol bol örnekler yapacağız. XSL hatırlayacağınız üzere xml dosyalarını kullanarak farklı formatlarda(xml, html) çıktı üretmeyi sağlamaktaydı. Şuan bol bol döviz kurlarını xml olarak alıp xsl ile formatlayıp ilgili kaynağa gönderme işleri yapıyorum

Unknown Nodes

Node bilgisini bilmediğimiz durumlarda wildcard kullanabiliriz. Bunu daha çok xml formatını bilmediğimiz gelen veriye göre dynamic oluşan xsl’lerde kullanabiliriz.

  1. /* ile employees ve employee tüm node’lar seçilir.
  2. //@* derinliği ne olursa olsun tüm attribute’ler seçilir.

 

Bu ve buna benzer oluşturacağınız expressionlar ile xml içerisinde dolaşabilirsiniz. Şuan bol bol xml, xsl, xml to xsl gibi işlerde çalışıyorum. Biraz da bloglayalım istedim

XPath expression ve fonksiyonlara detaylı bakabilirsiniz, XPath konusunda Axes konusu kaldı anlatacağım ondan sonra XSL oluşturmaya ve xml’i xsl’e transform etmeyi Java kodu ile göreceğiz.

XPath örnekleri yapmak için Eclipse yada Intellij üzerinde örnek bir xml oluşturup çalışabilirsiniz üzerinde. Bu konuda eclipse xpath tools bana daha kullanışlı geldi. Xml dosyası açıp eclipse üzerinden Shop Perspective kısmından xml seçilirse XPath expression kısmı da çıkacaktır. Şunun gibi;

Ekran Alıntısı

Yazımı burada sonlandırıyorum arkadaslar.

Mutlu kalın, kod’la kalın ve bol bol Çay için

~ Alican Akkus.

862 Total Views 1 Views Today