Merhaba Değerli Java Dostları,
Java ile xml işlemlerine durmadan devam ediyoruz. Bu yazıda da DOM işlemlerine göz atacağız. Her zaman olduğu gibi yine buradan pdf formatındaki yazıya ulaşabilirsiniz. Hemen SAX ile DOM arasında farka değinmek istiyorum. SAX işlemleri dosyayı bir defa parçalamaya dayanır ve geçilen noktaya geri dönebilmek için tekrar dosyanın okunması gerekir. DOM işlemlerinde ise daha karmaşık, güzel bir yapı karşımıza çıkıyor. Dosya bir defa okunduktan sonra ağaç yapısı şeklinde hafızada saklanır. Dolayısıyla artık hafıza üzerinden elemanlara direkt erişim vardır ve bu durumda hızlanma sağlar. Olayın kötü tarafı eğer xml dosyası boyutu çok büyükse bellekle ilgili problem oluşturabilir. Nasıl xml ve DTD dosyası oluşturulacağına SAX yazısında değinmiştim. Gerekli bilgileri orada bulabilirsiniz. Kodumuza bakalım ve hemen import kısmını ele alalım.
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; |
Yukarıdaki import kısmı uygulama boyunca gerekli olan sınıfları içeriyor.
private DocumentBuilderFactory factory; private DocumentBuilder builder; private Document document; |
Bu üç değişkeni uygulama boyunca kullanacağız. DocumentBuilderFactory ile varsayılan ayar üzerinden işlemler yapacağız. DocumentBuilder ile de ağaç yapısını elde etmeye çalışacağız. Son olarak da Document ile çözümlenmiş, ağaç yapısı haline gelmiş xml dosyası elimizde olacak. Peki bunları hangi metotlarla yapacağız. Hemen bakalım.
factory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); builder = factory.newDocumentBuilder(); document = builder.parse(new InputSource(new FileInputStream(new File(“veritabaniBaglantisi.xml”)))); |
Yukarıdaki işlemlerin ardından sıra istediğimiz elementi ve içeriğini almaya geliyor.
public Object xmlAlaniAl(String alanAdi) { NodeList nodeListesi = document.getDocumentElement().getChildNodes(); for(int i = 0; i < nodeListesi.getLength(); i++) { Node dugum = nodeListesi.item(i); if((dugum.getNodeType() == Node.ELEMENT_NODE) && ((Element)dugum).getTagName().equals(alanAdi)) return dugum.getChildNodes().item(0).getNodeValue(); } return null; } |
İstediğimiz elementi bulmayı sağlayacak olan kodu ayrı bir metot içerisinde tanımlamak daha şık ve anlaşılır duruyor. Aslında ağaç yapısı hakkında fikriniz varsa yukarıdaki kodda da devamlı dalları ve alt dalları arama işlemi yapıldığını hemen anlayacaksınız.
Java ile güçlü xml dünyasında yine güçlü uygulamalar yazabilirsiniz. DOM ve SAX sadece bunlardan birkaçı. Daha yeni yöntemlerle karşınızda olmayı ümit ediyorum.
Bol Java’ lı günler dileğiyle…
Yazan: Faruk BOZAN (Yazılım Mimarı / Software Architect)