Java StAX Ayrıştırıcı - Genel Bakış
StAX, XML belgesini SAX ayrıştırıcısının yaptığı gibi ayrıştırmak için Java tabanlı bir API'dir. Ancak iki API arasında iki büyük fark vardır -
StAX bir PULL API iken SAX bir PUSH API'dir. Bu, StAX ayrıştırıcı durumunda, bir istemci uygulamasının StAX ayrıştırıcısından ihtiyaç duyduğunda XML'den bilgi almasını istemesi gerektiği anlamına gelir. Ancak SAX ayrıştırıcısı olması durumunda, SAX ayrıştırıcısı istemci uygulamasına bilginin mevcut olduğunu bildirdiğinde bilgi almak için bir istemci uygulaması gerekir.
StAX API, XML belgelerini okuyabilir ve yazabilir. SAX API kullanılarak bir XML dosyası yalnızca okunabilir.
Ortam Kurulumu
StAX ayrıştırıcısını kullanmak için, uygulamanızın sınıf yolunda stax.jar'a sahip olmalısınız.
StAX API'nin özellikleri aşağıdadır -
İ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ı, bir yineleyici görevi gören ve gerekli bilgileri almak için olay üzerinde yineleyen bir "olay" okuyucu sağlar. Kullanılabilen başka bir okuyucu, XML düğümlerine işaretçi görevi gören "imleç" dir.
Olaylar tanımlandıkça, XML öğeleri olay nesnesinden alınabilir ve daha fazla işlenebilir.
Ne Zaman Kullanılır?
Şu durumlarda bir StAX 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üketen ç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 bölümünü içerir.
Veriler, ayrıştırıcı tarafından görülür görülmez kullanılabilir, bu nedenle StAX, bir akış üzerinden gelen bir XML belgesi için iyi çalışır.
SAX'in dezavantajları
Bir XML belgesine rastgele erişimimiz yoktur, çünkü yalnızca ileriye yönelik bir şekilde işlenir.
Ayrıştırıcının gördüğü veya ayrıştırıcının öğelerin sırasını nerede değiştirdiği verileri izlemeniz gerekiyorsa, kodu yazmalı ve verileri kendi başınıza depolamalısınız.
XMLEventReader Sınıfı
Bu sınıf, bir XML belgesini ayrıştırırken meydana gelen olayları yinelemek için kullanılabilen olayların yinelemesini sağlar.
StartElement asStartElement() - Bir elemanın değerini ve niteliklerini almak için kullanılır.
EndElement asEndElement() - Bir elemanın sonunda çağrılır.
Characters asCharacters() - CDATA, boşluk vb. Karakterleri elde etmek için kullanılabilir.
XMLEventWriter Sınıfı
Bu arayüz, bir olay yaratma yöntemlerini belirtir.
add(Event event) - XML'e öğeler içeren olay ekleyin.
XMLStreamReader Sınıfı
Bu sınıf, bir XML belgesini ayrıştırırken meydana gelen olayları yinelemek için kullanılabilen olayların yinelemesini sağlar.
int next() - Sonraki olayı almak için kullanılır.
boolean hasNext() - Başka olayların olup olmadığını kontrol etmek için kullanılır.
String getText() - Bir elemanın metnini almak için kullanılır.
String getLocalName() - Bir elemanın adını almak için kullanılır.
XMLStreamWriter Sınıfı
Bu arayüz, bir olay yaratma yöntemlerini belirtir.
writeStartElement(String localName) - Verilen adda bir başlangıç öğesi ekleyin.
writeEndElement(String localName) - Verilen adda bir son öğe ekleyin.
writeAttribute(String localName, String value) - Bir elemanın niteliklerini yazın.