<?xml version="1.0" encoding="UTF-8"?> <playlist version="1" xmlns="http://xspf.org/ns/0/"> <trackList> <track> <location>LimeWire/Saved/Melihat Gülses - Incesaz - Cok Asigin Var Diyorlar.mp3</location> </track> <track> <location>file:///media/VM/MP3/Aldirma Gonul.mp3</location> </track> </trackList> </playlis
Eğer bu biçimi desteklemek istiyorsak yukarıdaki XML dosya tipini okuyabiliyor olmalıyız. Java’da XML işlemlerini yapabilmek için bir org.w3c.dom.Document arayüzünü gerçekleyen bir nesne oluşturmalıyız. Bu nesne XML ağacını (XML içeriğine hiyerarşik yapısından dolayı verilen ad) tüm özellikleriyle hafızada tutar. Herhangi bir XML dosyasından Document nesnesi oluşturma işlemini ise DocumentBuilder sınıfı yapar. DocumentBuilder sınıfı soyut bir sınıf olduğundan farklı alt sınıfları tarafından farklı XML parçalama (parse) algoritmaları gerçeklenir. Bu algoritmalar iteratif yada öz yineli (recursive) olabilir. DocumentBuilder nesnesini ise DocumentBuilderFactory sınıfı üzerinden elde ederiz. Bu işlemin kodunu görelim :
DocumentBuilder builder = null;
Document doc = null;
try {
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
doc = builder.parse(new File(fileName));
}
catch (ParserConfigurationException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (SAXException ex) {
ex.printStackTrace();
}
Document nesnesi elde edildikten sonra ihtiyacımız olan XML elemanlarına ulaşma kolaydır. Örneğin yukarıdaki örnek XML dosyasındaki
NodeList songs = doc.getElementsByTagName("location");
if(songs.getLength() != 0) {
model = new PlayListModel();
}
for (int i = 0; i < songs.getLength(); i++) {
model.addSong(songs.item(i).getTextContent());
}
Burada getElementsByTagName ve getTextContent metodlarına dikkat edelim. getTextContent metodu Node arayüzüne dahil olup o düğümün metin içeriğini almaya yarar.
XML Yazma işlemi de yine okuma işlemi gibi Document nesneleri üzerinden yürütülür. Hafızadaki herhangi bir veriyi XML olarak yazabilmek için öncelikle bu veriden bir DOM ağacı oluşturmalıyız. Örneğin elimizdeki şarkı listesinden DOM ağacı oluşturmak için :
private static Document createDOM(final IPlayListModel playListToBeExported) throws DOMException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
Document doc = null;
Element root = null;
try {
builder = factory.newDocumentBuilder();
doc = builder.newDocument();
root = (Element) doc.createElement("playlist");
doc.appendChild(root);
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
}
if(root != null) {
List songList = playListToBeExported.getSongList();
for(int i = 0; i < songList.size(); i++) {
Element el = doc.createElement("location");
el.setTextContent((String)songList.get(i));
// el.setNodeValue();
root.appendChild(el);
}
}
return doc;
}
DOM ağacında herhangi bir düğüme çocuk düğüm eklemek için appendChild metodunu, herhangi bir düğümün metin içeriğini girmek için ise setTextContent metodunu kullanıyoruz. DOM ağacımızı dosyaya yazmak için ise javax.xml.transform paketi sınıflarını kullanabiliriz. Bu paketten Source, Result arayüzleri Transformer soyut sınıfı aracılığıyla herhangi bir DOM ağacını çeşitli çıktılara yönlendirebiliriz. DOM ağacımızı dosyaya yazmak için :
private static void writeDocToFile(Document doc, String fileName) {
try {
JFileChooser ch = new JFileChooser();
if (ch.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
Source source = new DOMSource(doc);
File file = new File(ch.getSelectedFile().getAbsolutePath());
Result result = new StreamResult(file);
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(source, result);
}
} catch (TransformerConfigurationException e) {
} catch (TransformerException e) {
}
}
İlgili Yazılar:
- Java Dersleri 9 – Dosya Okuma/Yazma İşlemleri Bu derste sizlere Java’nın dosya işlemlerinden bahsedeceğim. Üç bölümlük serinin...
- Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
- NetBeans Video Ders (Screencast) #4 İkilik (Binary) Dosya Okuma Sitede yaptığım anketler sonucunda java video derslerimizin sesli anlatımlı...
- Java Dersleri 2 – Sınıf Kavramı ve Yapısı (Class Structure) JDK kurulumunu ve derleyici kullanımını öğrendikten sonra kod geliştirmeye başlayabiliriz....
- Java Dersleri 17 – JDBC API (Veritabanı Bağlantısı) Bu makalede Java’nın veritabanı kabiliyetlerinden bahsedeceğim. Java’nın tüm veritabanlarına ulaşmak...

(3 oy verilmiş, ortalama: 9,67) <-- Oy Vermeden Geçme
0 Yorum.