Java Parser StAX - przegląd
StAX to oparty na Javie interfejs API do analizowania dokumentu XML w podobny sposób, jak robi to parser SAX. Są jednak dwie główne różnice między tymi dwoma interfejsami API -
StAX to PULL API, natomiast SAX to PUSH API. Oznacza to, że w przypadku parsera StAX aplikacja kliencka musi poprosić parser StAX o pobranie informacji z XML, kiedy tylko tego potrzebuje. Jednak w przypadku parsera SAX aplikacja kliencka jest wymagana do uzyskania informacji, gdy parser SAX powiadamia aplikację kliencką, że informacje są dostępne.
StAX API może czytać i zapisywać dokumenty XML. Za pomocą SAX API można tylko czytać plik XML.
Konfiguracja środowiska
Aby użyć parsera StAX, powinieneś mieć stax.jar w ścieżce klas aplikacji.
Oto cechy StAX API -
Odczytuje dokument XML od góry do dołu, rozpoznając tokeny, które składają się na dobrze sformułowany dokument XML.
Tokeny są przetwarzane w tej samej kolejności, w jakiej pojawiają się w dokumencie.
Informuje aplikację o naturze tokenów napotkanych przez analizator składni w momencie ich wystąpienia.
Aplikacja zapewnia czytnik „zdarzeń”, który działa jako iterator i wykonuje iterację po zdarzeniu, aby uzyskać wymagane informacje. Innym dostępnym czytnikiem jest „kursor”, który działa jako wskaźnik do węzłów XML.
Gdy zdarzenia są identyfikowane, elementy XML mogą być pobierane z obiektu zdarzenia i mogą być dalej przetwarzane.
Kiedy użyć?
Powinieneś użyć parsera StAX, gdy -
Możesz przetwarzać dokument XML w sposób liniowy od góry do dołu.
Dokument nie jest głęboko zagnieżdżony.
Przetwarzasz bardzo duży dokument XML, którego drzewo DOM zużywałoby zbyt dużo pamięci. Typowe implementacje DOM używają dziesięciu bajtów pamięci do reprezentowania jednego bajtu XML.
Problem do rozwiązania dotyczy tylko części dokumentu XML.
Dane są dostępne, gdy tylko zostaną odczytane przez parser, więc StAX działa dobrze dla dokumentu XML, który dociera do strumienia.
Wady SAX
Nie mamy losowego dostępu do dokumentu XML, ponieważ jest on przetwarzany tylko do przodu.
Jeśli chcesz śledzić dane, które parser widział lub gdzie parser zmienił kolejność elementów, musisz samodzielnie napisać kod i przechowywać dane.
Klasa XMLEventReader
Ta klasa zapewnia iterator zdarzeń, które mogą być używane do iteracji po zdarzeniach, które występują podczas analizowania dokumentu XML.
StartElement asStartElement() - Służy do pobierania wartości i atrybutów elementu.
EndElement asEndElement() - Wywoływane na końcu elementu.
Characters asCharacters() - Może służyć do uzyskiwania znaków, takich jak CDATA, spacje itp.
Klasa XMLEventWriter
Ten interfejs określa metody tworzenia zdarzenia.
add(Event event) - Dodaj wydarzenie zawierające elementy do XML.
Klasa XMLStreamReader
Ta klasa zapewnia iterator zdarzeń, które mogą być używane do iteracji po zdarzeniach, które występują podczas analizowania dokumentu XML.
int next() - Służy do pobierania następnego zdarzenia.
boolean hasNext() - Używany do sprawdzania, czy istnieją dalsze wydarzenia, czy nie.
String getText() - Służy do pobierania tekstu elementu.
String getLocalName() - Używany do uzyskania nazwy elementu.
Klasa XMLStreamWriter
Ten interfejs określa metody tworzenia zdarzenia.
writeStartElement(String localName) - Dodaj element początkowy o podanej nazwie.
writeEndElement(String localName) - Dodaj element końcowy o podanej nazwie.
writeAttribute(String localName, String value) - Zapisz atrybuty do elementu.