Java İle XML İşlemleri – StAX Cursor

Java İle XML İşlemleri – StAX Cursor

27 Görüntülenme
0
0

Merhaba Değerli Java Dostları, 

Daha önceki iki XML yazımda DOM ve SAX yöntemlerine değinmiştim. Şimdi ise bir diğer yöntem olan StAX konusuna değinmeye çalışacağım. Yazının pdf formatına buradan ulaşabilirsiniz. StAX, SAX’ a oldukça benzer; fakat birkaç noktada ayrılır. Örneğin; cursor ve iterator olmak üzere kendi içerisinde iki alt yöntem içerir. Bu yazımda cursora değineceğim. En önemli fark ise şudur. SAX’ da olaylar oluşturulur, kullanıcı uyarılır ve işlenir. StAX’ da ise kullanıcı uyarılmaz. Gereken durumlar da olaylar işletilir. Dolayısıyla kullanıcı olaylar arasında seçim yapabilir. Örnek üzerinde daha iyi anlaşılacaktır.

package com.farukbozan.ornekler.xml;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import javax.swing.JOptionPane;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

class StAXCursorOkuyucu
{

private XMLStreamReader okuyucu;

public StAXCursorOkuyucu(File xmlDosyasi)
{
try
{
XMLInputFactory factory = XMLInputFactory.newFactory();
InputStream is = new FileInputStream(xmlDosyasi);
okuyucu = factory.createXMLStreamReader(is);
}
catch(FactoryConfigurationError e)
{
JOptionPane.showMessageDialog(null, e.getMessage(), “Hata”, JOptionPane.ERROR_MESSAGE);
}
catch(XMLStreamException e)
{
JOptionPane.showMessageDialog(null, e.getMessage(), “Hata”, JOptionPane.ERROR);
}
catch(FileNotFoundException e)
{
JOptionPane.showMessageDialog(null, e.getMessage(), “Hata”, JOptionPane.ERROR_MESSAGE);
}
}

public void dosyayiOku()
{
try
{
while(okuyucu.hasNext())
{
int event = okuyucu.next();
switch(event)
{
case XMLStreamConstants.START_DOCUMENT:
System.out.println(“Dosya okuma basladi”);
break;
case XMLStreamConstants.END_DOCUMENT:
System.out.println(“Dosya okuma bitti”);
break;
case XMLStreamConstants.START_ELEMENT:
System.out.println(okuyucu.getLocalName() + ” elementi okuma basladi”);
break;
case XMLStreamConstants.END_ELEMENT:
System.out.println(okuyucu.getLocalName() + ” elementi okuma bitti”);
break;
case XMLStreamConstants.CHARACTERS:
System.out.println(okuyucu.getText());
}
}
}
catch(XMLStreamException e)
{
JOptionPane.showMessageDialog(null, e.getMessage(), “Hata”, JOptionPane.ERROR_MESSAGE);
}
}

}

public class MainStAX {

public static void main(String[] args) {

StAXCursorOkuyucu staxCursorOkuyucu = new StAXCursorOkuyucu(new File(“ornek.xml”));

staxCursorOkuyucu.dosyayiOku();

}

}

Örnek uygulamamız main bloğuna sahip bir sınıf üzerinden gidiyor. Yalnız olayı daha rahat görebilmemiz için bir iç sınıf kullandım. Yapılandırıcımız, SAX yapılandırıcımızdan biraz farklı şekilde bağlantı oluşturmaktadır; ama zor veya anlaşılmaz olduğunu söylemek mümkün değil :D. Asıl önemli, fark oluşturan kısma geliyoruz. Dikkat ederseniz SAX’ da bizi uyaran metotlar bir interface aracılığı ile oluşturuluyor ve otomatik çağrılıyordu. StAX’ da ise olay daha da kontrollü bir şekilde gidiyor. Olayların tiplerini kontrol edip, duruma göre işlem yapabiliyoruz. Yine her zamanki gibi oldukça basit işlemler; ama bir o kadar güçlü ve ihtiyaç karşılar türden.

Bol Java’ lı günler dileğiyle…

Yazan: Faruk BOZAN (Yazılım Mimarı / Software Architect)

Yorum Yap

Kategoriler