DOM ve SAX Api arasındaki farklar nelerdir ?
Java ile XML dosyaları üzerinde çalışırken en sık kullanılan iki API SAX (Simple API for XML) ve DOM (Document Object Model)‘dur. Her ikisi de XML verilerini okumak için kullanılsa da çalışma şekilleri ve kullanım amaçları birbirinden oldukça farklıdır.
Aşağıda iki API’nin temel özelliklerini ve hangi durumlarda tercih edilmesi gerektiğini özetlemeye çalıştım.
SAX (Simple API for XML)
- XML dosyasını baştan sona doğru sıralı (stream) olarak okur.
- Tüm XML belgesini belleğe yüklemez.
- Bellek tüketimi oldukça düşüktür.
- Event (olay) tabanlı bir parser’dır.
- Büyük XML dosyalarında oldukça başarılı performans sunar.
- XML üzerinde doğrudan değişiklik yapılamaz.
- Yeni düğüm (node) eklemek veya mevcut düğümleri silmek mümkün değildir.
- XML içerisindeki yorum satırlarını (comments) koruyabilir.
- Düşük bellek kullanımı sayesinde genellikle DOM’a göre daha hızlı çalışır.
DOM (Document Object Model)
- XML belgesinin tamamını belleğe yükledikten sonra işlem yapar.
- Tree (ağaç) tabanlı bir veri modeli kullanır.
- XML belgesi üzerinde istenilen düğüme doğrudan erişilebilir.
- İleri veya geri yönde rahatlıkla dolaşılabilir.
- Yeni node eklemek, silmek veya güncellemek mümkündür.
- Bellek kullanımı SAX’a göre daha yüksektir.
- Büyük XML dosyalarında performans dezavantajı oluşturabilir.
- XML üzerinde düzenleme yapılacak uygulamalar için oldukça uygundur.
SAX ve DOM Karşılaştırması
| Özellik | SAX | DOM |
|---|---|---|
| Çalışma modeli | Event tabanlı | Tree tabanlı |
| Bellek kullanımı | Düşük | Yüksek |
| XML’i tamamen belleğe alır mı? | Hayır | Evet |
| XML üzerinde değişiklik yapılabilir mi? | Hayır | Evet |
| Node ekleme / silme | Desteklemez | Destekler |
| Büyük XML dosyaları | Çok uygundur | Bellek tüketebilir |
| Performans | Genellikle daha hızlı | Bir miktar daha yavaş |
| Kullanım kolaylığı | Daha basit | Daha esnek |
Hangisini Tercih Etmeliyim?
XML dosyasını yalnızca okuyacak ve büyük veri kümeleri üzerinde çalışacaksanız SAX daha doğru bir seçim olacaktır.
Eğer XML üzerinde düzenleme yapmanız, yeni düğümler eklemeniz veya mevcut yapıyı değiştirmeniz gerekiyorsa DOM çok daha uygun bir çözümdür.
Kısacası;
- Sadece okumak → SAX
- Okumak ve düzenlemek → DOM
Bu iki API uzun yıllardır Java ekosisteminin temel XML işleme çözümleri arasında yer almaktadır ve günümüzde de pek çok projede kullanılmaya devam etmektedir.
📝 Arşiv Notu
Bu yazı ilk olarak 2011 yılında hazırlanmıştır. SAX ve DOM API’lerinin temel çalışma prensipleri günümüzde de değişmemiştir. Ancak modern Java uygulamalarında XML yerine JSON daha yaygın kullanılmakta; XML tabanlı projelerde ise JAXB, StAX ve Jackson XML gibi daha gelişmiş kütüphaneler de tercih edilmektedir.