Thursday, November 1, 2001

Basit XPath Örneği

Bu yazımızda XPath ve DOM kullanarak basit XML işleme örneklerini göreceğiz. İlk lazım olan, XML dosyasını sabit diskten okumaktır.

  public Document belgeOku() {
try {
// yapici fabrika yarat
DocumentBuilderFactory fabrika = DocumentBuilderFactory.newInstance();
factory.setValidating(false);

// yapiciyi yarat ve dosyayi islemeye basla
Document belge = fabrika.newDocumentBuilder().parse(new File("ornek.xml"));
return belge;
} catch (SAXException e) {
// A isleme hatasi var, XML dosyasi icinde bir yanlislik olabilir.
} catch (ParserConfigurationException e) {
} catch (IOException e) {
}
return null;
}

Lazım olan import kelimelerini üste koymayı unutmayın.

import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import java.util.*;
import java.io.*;

Şimdi, 'kategoriler' etiketi altindaki bilgileri almak için gereken XPath komutunu görelim.

  public NodeList butunKategorileriBul()
{
Document doc = belgeOku();
String xpath = "/kategoriler/*";
try {
// Uyan elemanlari geri getir.
NodeList dugumListe = org.apache.xpath.XPathAPI.selectNodeList(doc, xpath);
return dugumListe;

} catch (javax.xml.transform.TransformerException e) { }

return null;

}

Bu listeyi aldıktan sonra, listedeki düğümler içinden, özellik değerlerini (attributes) çıkartmamız gerekiyor. Bu değerler baslik= tabirinden sonra gelen değerler olacak.

  public ArrayList ozellikleriCikar(NodeList liste)
{
ArrayList dizin = new ArrayList();
for (int i=0; i < liste.getLength(); i++) {
Element elem = (Element)liste.item(i);

// Eleman altindaki butun ozellikleri geri getir
NamedNodeMap ozellikler = elem.getAttributes();

// Ozellik sayisini getir
int ozSayisi = ozellikler.getLength();

// Her ozelligi isle
for (int j=0; j < ozSayisi; j++) {
Attr ozellik = (Attr)ozellikler.item(j);

// Ozellik isim ve degeri getir.
String ozIsim = ozellik.getNodeName();
String ozDeger = ozellik.getNodeValue();
dizin.add(ozDeger);
}
}

return dizin;
}


Artık ayrı bir JUnit birim test sınıfı altında şunları kullanabilirsiniz.

  public void testArticleListeDetay() throws Exception {
ArticleList liste = new ArticleList();
assertTrue (
(liste.ozellikleriCikar(liste.butunKategorileriBul())).contains("eCRM")
);


Örnek bir XML dosyasını aşağıda veriyoruz.

<?xml version="1.0" encoding="iso-8859-9"?>
<kategoriler>
<kategori baslik="eCRM">
<yazi>a_etl.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_hangi_verileri_alalim.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_internet_veri_ambari.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_musteri_kayitlari.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_oracle_kavramlari.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_oracle_kullanim.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_oracle_parallel.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_oracle_query_optimize.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_veri_madenciligi.xml<tarih>19 Nisan 2002</tarih></yazi>
</kategori>
<kategori baslik="Genel">
<yazi>a_acik_anahtar_sifreleme.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_continous_integration.xml<tarih>19 Nisan 2002</tarih></yazi>
<yazi>a_cvs.xml<tarih>19 Nisan 2002</tarih></yazi>
</kategori>
</kategoriler>



Örnekleri derleyebilmek için en son Xalan sürümünü indirmeniz gerekiyor.

No comments: