SAX Ayrıştırıcı - Genel Bakış
SAX (XML için Basit API), xml belgeleri için olay tabanlı bir ayrıştırıcıdır. DOM ayrıştırıcısının aksine, SAX ayrıştırıcısı hiçbir ayrıştırma ağacı oluşturmaz. SAX, XML için bir akış arabirimidir; bu, SAX kullanan uygulamaların, işlenmekte olan XML belgesiyle ilgili olay bildirimlerini aldığı anlamına gelir - bir öğe ve öznitelik, belgenin üstünden başlayıp kapanışıyla biten sıralı bir sırada KÖK öğesi.
İyi biçimlendirilmiş bir XML belgesini oluşturan belirteçleri tanıyarak yukarıdan aşağıya bir XML belgesini okur.
Belirteçler, belgede göründükleri sırayla işlenir.
Uygulama programını, ayrıştırıcının ortaya çıktıkça karşılaştığı belirteçlerin niteliğini bildirir.
Uygulama programı, ayrıştırıcıyla kaydedilmesi gereken bir "olay" işleyicisi sağlar.
Simgeler tanımlandıkça, işleyicideki geri çağırma yöntemleri ilgili bilgilerle çağrılır.
Ne zaman kullanılmalı?
SAX ayrıştırıcı kullanmalısınız -
XML belgesini yukarıdan aşağıya doğrusal bir şekilde işleyebilirsiniz.
Belge derinlemesine iç içe geçmiş değil.
DOM ağacı çok fazla bellek tüketecek çok büyük bir XML belgesini işliyorsunuz. Tipik DOM uygulamaları, XML baytını temsil etmek için on bayt bellek kullanır.
Çözülmesi gereken sorun, XML belgesinin yalnızca bir kısmını içerir.
Veriler, ayrıştırıcı tarafından görülür görülmez kullanılabilir, bu nedenle SAX, bir akış üzerinden gelen bir XML belgesi için iyi çalışır.
SAX'in dezavantajları
Bir XML belgesine yalnızca ileriye dönük olarak işlendiği için rastgele erişimimiz yoktur.
Ayrıştırıcının gördüğü verileri takip etmeniz veya öğelerin sırasını değiştirmeniz gerekirse, kodu yazmalı ve verileri kendi başınıza depolamalısınız.
ContentHandler Arayüzü
Bu arabirim, SAX ayrıştırıcısının gördüğü XML belgesinin bileşenlerini uygulama programına bildirmek için kullandığı geri çağrı yöntemlerini belirtir.
void startDocument() - Bir belgenin başında çağrılır.
void endDocument() - Bir belgenin başında çağrılır.
void startElement(String uri, String localName, String qName, Attributes atts) - Bir elemanın başında çağrılır.
void endElement(String uri, String localName,String qName) - Bir elemanın sonunda çağrılır.
void characters(char[] ch, int start, int length) - Karakter verileriyle karşılaşıldığında çağrılır.
void ignorableWhitespace( char[] ch, int start, int length) - Bir DTD mevcut olduğunda ve ihmal edilebilir boşlukla karşılaşıldığında çağrılır.
void processingInstruction(String target, String data) - Bir işleme talimatı tanındığında çağrılır.
void setDocumentLocator(Locator locator)) - Belgedeki konumları tanımlamak için kullanılabilecek bir Konum Belirleyici sağlar.
void skippedEntity(String name) - Çözümlenmemiş bir varlıkla karşılaşıldığında çağrılır.
void startPrefixMapping(String prefix, String uri) - Yeni bir ad alanı eşlemesi tanımlandığında çağrılır.
void endPrefixMapping(String prefix) - Bir ad alanı tanımı kapsamını bitirdiğinde çağrılır.
Nitelikler Arayüzü
Bu arayüz, bir elemana bağlı özniteliklerin işlenmesine yönelik yöntemleri belirtir.
int getLength() - Özniteliklerin sayısını döndürür.
String getQName(int index)
String getValue(int index)
String getValue(String qname)