Java ME’de XML iÅŸlemek

____________________________________________________________________

XML biçiminde içerikler ne kadar yaygın olsa da Java ME destekleyen çoÄŸu cihaz bunu desteklemiyor. XML iÅŸlenmesi cep telefonları gibi düşük iÅŸlem gücüne sahip aletlerde zaman alıcı olduÄŸundan XML iÅŸleme desteÄŸi standart olarak eklenmedi. JSR 280 (XML API for Java ME – Java ME için XML API) olsa da ne yazık ki hala çoÄŸu cihazın sanal makinesinde bulunmayan bir özellik. Bu durumda da geliÅŸtiriciler XML iÅŸleme iÅŸini kendileri yaptırmak zorundalar. Bunun için isteyen (benim de ilk baÅŸta yaptığım gibi) kendi XML iÅŸleme kütüphanesini yazmaya kalkabilir( 😀 ), isteyen de KXML adındaki pek iyi XML iÅŸleme kütüphanesini kullanabilir.

KXML kütüphanesi ile uygulamanıza XML işleme özelliği ekleyebiliyorsunuz. Böylece sizi kendi XML kütüphanesini işleme derdinden kurtarıyor. Sanırım kod son olarak 2005 yılında düzenlenmiş ancak JSR 280 (tahminim) daha sonra çıktığı için bu kodu uygulamanızda kullanmak cihaz JSR 280 desteklese bile daha iyidir, çünkü çoğu cihazda JSR 280 desteği yoktur. Ya da hiç değilse JSR 280 yok ise bu kodu kullanması için bir kod yazın ki uygulamanız tüm cihazlarla uyumlu olsun. JSR 280 muhtemelen daha hızlı işlem yapacaktır, bu konuda pek yapacağımız yok.

KXML2 sürümünü buradan indirebilirsiniz, 3 için planlar var ama 4 yıldır gelmediğine göre gelmeyecek anlaşılan. 🙂

KXML kullanabilmek için KXML kütüphanesini IDE programınıza tanıtmanız gerekli ki derleme esnasında bu kütüphaneyi de uygulamanıza eklesin. Bunun için NetBeans‘ta projenizin üzerine saÄŸ tıklayıp Properties > Build > Libraries & Resources yolundan gidin. Burada Add JAR/ZIP… butonuna tıklayıp indirdiÄŸiniz JAR dosyasını bulup seçin. Bundan sonra Open dediÄŸinizde kütüphane uygulamanıza eklenmiÅŸ olacaktır. NetBeans kütüphaneyi tarayıp kullanım esnasında iÅŸe yarayacak metodları vs. göstermek için indeksleyecektir.

kxml2 NetBeans'a ekli.

KXML2 NetBeans'a ekli.

Bundan sonra iÅŸ uygulamanızda bu kütüphaneyi çağırıp kullanmaya geldi. Öncelikle aÅŸağıdaki kodu NetBeans’a eklemiÅŸ olduÄŸunuz kütüphanenin çaÄŸrılması ve yüklenmesi için kodunuzun import kısmına yani çoÄŸunlukla sayfa başına tüm sınıfların dışına bir yere ekleyin:
import org.kxml2.io.*;
import org.xmlpull.v1.*;

Bundan sonra kütüphaneyi uygulamanızda kullanabilirsiniz. Kütüphanenin tanıyacağı XML yapısı aşağıdaki şekildedir, ayrıca yorum ve CDATA gibi kısımlar da tanınır (ancak kullanılır mı incelemedim).

<eleman>
<metin>metin1</metin>
<metin>metin2</metin>
</eleman>

Bu kodu da şu şekilde bir kod ile çözümleyebiliriz:


String string = "XML içeriğimiz, dosyamız vs.";
KXmlParser XMLicerik = new KXmlParser();
ByteArrayInputStream stream = new ByteArrayInputStream(string.getBytes("UTF-8"));
reader = new InputStreamReader(stream, "UTF-8");
XMLicerik.setInput(reader);
XMLicerik.nextTag();
XMLicerik.require(XmlPullParser.START_TAG, null, "eleman");
while(XMLicerik.nextTag() == XmlPullParser.START_TAG) {
XMLicerik.require(XmlPullParser.START_TAG, null, "metin");
System.out.println("metin içeriği: "+ XMLicerik.nextText());
XMLicerik.require(XmlPullParser.END_TAG, null, "metin");
}
XMLicerik.require(XmlPullParser.END_TAG, null, "eleman");

Burada XMLicerik adında bir KxmlParser oluÅŸturduk. Buna da ByteArrayInputStream ÅŸeklinde bir giriÅŸ akıntısı (! InputStream – Türkçe ne desem ki 🙂 ) içeriÄŸi verdik. Türkçe içerikte String nesnemizi Byte‘a çevirirken kullandığımız getBytes() metodunda parametre olarak “UTF-8” girmezsek karakter problemi yaşıyoruz. Veya getInputEnchoding() yöntemini XMLicerik öğemize uygulayarak kodlama biçimini alıp ona özel iÅŸlem de yapabiliriz. Daha sonra da setInput() metoduna verdiÄŸimiz parametre ile de XMLicerik için bir giriÅŸ nesnesi belirleyip iÅŸlemeye baÅŸlayabiliyoruz. Kullandığım nextTag() bir sonraki XML etiketine gider. require() yönteminin parametreleri ile etiketin bir baÅŸlangıç etiketi olup olmadığı ve bizim önceden belirlediÄŸimiz eleman ismindeki etiket olup olmadığı kontrol edilir. Aslında buna gerek yoktur, sadece iÅŸi yavaÅŸlatır, ancak bol hata olma ihtimali olan durumlarda da iyidir. nextText() yöntemi ile de belirlediÄŸimiz etiket içindeki veri alınır.

Bu örnekteki birkaç taneden baÅŸka kütüphanede çok daha fazla miktarda faklı iÅŸi görecek metod var, bunların tümünü görmek için de NetBeans’ı kullanabilirsiniz. Åžimdilik hepsini teker teker inceleyip anlatmam zor. 🙂

Yorum yok

Henüz bir yorum yok.

Bu yazıdaki yorumlar için RSS beslemesi. Geri izleme URI

Yorum yaz