Tuesday, October 29, 2002

Jaxen = XPath + JDOM

XPath ve JDOM'un kendilerine göre güçlü tarafları olduğunu biliyoruz. XPath, işletim sisteminde olduğu gibi bir dizin erişim sözdizim yapısı kullanarak, XML dosyalarındaki elemanlara erişimi çok basitleştiriyordu. JDOM kütüphanesi de, hiç yoktan bir XML dosyası yaratmak (eleman eklenek, çıkartmak) için birebir idi.

Eksik olan, bu iki kütüphanenin birleşimi türünden bir kütüphane idi. Mesela XPath kullanarak eriştiğimiz bir XML elemanına, JDOM kullanarak tek bir değer eklemeyi sâglayacak bir kütüphane. Bu boşluğu da Jaxen doldurmuştur.

Örnek

Örnek olarak aşağıda gösterilen XML dosyasında bulunan "Genel" kategorisi (elemanı) altına, yeni bir "yazi" etiketi ekleyelim.

<?xml version="1.0" encoding="UTF-8"?>
<kategoriler>
<kategori baslik="Filan">
<yazi>a_etl.xml</yazi>
<yazi>a_hangi_verileri_alalim.xml</yazi>
<yazi>a_internet_veri_ambari.xml</yazi>
<yazi>a_musteri_kayitlari.xml</yazi>
...
<kategori baslik="Genel">
<yazi>a_bir.xml</yazi>
...
</kategoriler>





Eklenecek yazi, a_iki.xml adındaki dosya olsun.

import org.jdom.*;
import org.jaxen.*;
import org.jaxen.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
...
...

try {
String kategori = "Genel";
String yazi = "a_iki.xml";

String erisim =
"/kategoriler/kategori[@baslik='" + kategori + "']";

SAXBuilder builder = new SAXBuilder();
org.jdom.Document belge = builder.build("c:/dizin/dosya.xml");

XPath xpath = new JDOMXPath(erisim);
List sonuclar = xpath.selectNodes(belge);

org.jdom.Element genelKategori = (org.jdom.Element)sonuclar.get(0);
genelKategori.addContent(new
org.jdom.Element("yazi").addContent(yazi));

XMLOutputter yazici = new XMLOutputter(" ", true);
FileWriter yazan = new FileWriter(getDosyaIsmi());
yazici.output(belge, yazan);
yazan.close();

} catch (Exception istisna) {
istisna.printStackTrace();
}
...
...


Bu kadar basit! Bu kodun daha önceki XPath koduna ne kadar benzediği herhalde belli oluyor.

Kurmak İçin

Jaxen bir nevi tutkal işlevi gören bir kütüphane olduğu için, her XML işleyen öteki kütüphaneye dönük bir tutkallayıcı kod paketi mevcut. Mesela, mevcut olan jar'lar,

jaxen-core.jar
jaxen-dom.jar
jaxen-dom4j.jar
jaxen-exml.jar
jaxen-full.jar
jaxen-jdom.jar

Sitemiz için biz jaxen-core.jar (zorunlu) ve jaxen-jdom.jar'ı kullandık. Çünkü arayüz ile kullandığımız asıl XML kütüphane JDOM.

Eğer yer sorununuz yok ise, sadece jaxen-full.jar'ı kullanabilirsiniz, jaxen-full.jar, tutkal kütüphanelerin tamamını içeriyor.

Kaynaklar

* Jaxen

No comments: