Ana içeriğe atla

Java XML Parsing

Dağıtık sistemler dersinin bir önceki ödevi RMI kullanarak web üzerinden üç siteden RSS ve XML hizmetlerini kullanarak verileri çekerek basit bir arayüz ile kullanıcıya sunmaktı.

Bu proje iki temel parçadan oluşuyor. Birinci parçası bu yazıda anlatacağım XML parsing parçası. XML parsing işlemi için üç farklı API kullanmanız mümkündür.

SAX: Olay tabanlı, kullanımı kolay bir parserdır. Ancak rastgele bir etiketi bulmak zorlayabilir. SAX ayrıca verimlidir. Büyük XML dosyaları için kullanılması zorunludur. Çünkü belgenin hepsini belleğe almamaktadır.
DOM: XML belgelerini bir ağaç gibi ele alır. Yazma ve okuma API'sidir. Varolan XML belgeleri okuduğu gibi yenilerini oluşturmada da işe yarar. Her belge Document nesnesi olarak ele alınır, bu nesne sorgulanır, aranır ve güncellenir. DOM yardımıyla rastgele erişimler daha kolaydır. SAX'a nazaran daha fazla hafıza harcar. Streaming uygulamaları için uygun değildir.
JAXP: SAX ve DOM'u ortak kullanarak iş görür.
(Bunların dışında JDOM, dom4j, ElectricXML ve XMLPULL incelenebilir.)

Ben kolay olması amacıyla ve XML dosya yapılarını bildiğim için DOM örneğini göstereceğim.

Bu XML parsing örneğinde TCMB günlük döviz kurlarının parse edilmesini göstereceğim.

İlk olarak XML dosya yapısını inceleyelim: (Aşağıdaki örnek sadeleştirilmiştir)

Yukarıdaki resimde görüldüğü gibi ağaç yapımız oldukça basittir. Bizim ilgilendiğimiz Currency etiketleri ve onun altındaki etiklerdir. Currency etiketi içerisindeki CurrencyCode ve Kod özellik olarak alınıyor, diğer bilgilerin hepsi alt etiket olduğu için element olarak alınıyor. Aşağıdaki kod parçası parse işlemini göstermektedir:


Yukarıdaki kod parçasındaki yorumlar yardımıyla işlemler anlaşılabilir. Aşağıda da yukarıda kullandığımız ve verileri metin olarak almamızı sağlayan metodlar görülmektedir:

Yukarıdan da anlaşıldığı gibi bir XML dosyasının okunmasını tek bir sınıf içerisinde gerçekleştirebildik.

DOM kullanarak çok basit bir şekilde XML dosyası parse edip, içeriğini bellekteki nesnelere aldık. Bu nesneleri kullanıp dosyayı tekrar okumaya gerek kalmadan çevirme işlemlerini yapabiliyoruz. DOM kullanarak tüm belge belleğe alınıp ağaç şeklinde oluşturulduğu için tüm belgeyi sırayla da dolaşabilirsiniz. Ya da belgenin rastgele bir etiketine (bizim yaptığımız gibi) erişebilirsiniz. Aşağıda bu örneğin Eclipse proje kaynak kodlarını (ayrıca iki tane RSS okuma örneğide var.) aşağıdaki linkten edinebilirsiniz. Bu örnekleri kullanarak kendi XML dosyalarınız için parserlar yazabilirsiniz. (Biterken Lacuna Coil When A Dead Man Walks çalıyordu)

Kodlar Çalışan Örnek

Kaynak: http://www.cafeconleche.org/books/xmljava/chapters/ch05s02.html

Yorumlar

Bülent dedi ki…
Çok faydalı ve çok düzenli bir örnek. Teşekkürler
Emre dedi ki…
Elinize sağlık hocam.
Sezin Karli dedi ki…
syntaxhighlighter tavsiye ederim kod paylaşırken. png'den okumak gerçekten büyük ızdırap
Adsız dedi ki…
Çok faydalı, sağolun.
Adsız dedi ki…
Nasıl ekrana yazdırabilirim. Main bloğunu göremedim.
T. E. Kalaycı dedi ki…
CurrencyPanel.java sınıfı bir JFrame sınıfı, görsel işlemler onun içerisinde gerçekleştiriliyor. Konsola mesaj yazdırma işlemi için o ve diğer sınıflarda uygun yerlerde System.out.println kullanılabilir veya Swing'in ilgili dialog işlevlerinden (JOptionPane) yararlanılabilir.
Hüseyincan Şahin dedi ki…
Çok faydalı ve güzel bir örnek , teşekkürler