Parser StAX - przegląd
StAX jest interfejsem API opartym na JAVA do analizowania dokumentów XML w podobny sposób, jak parser SAX. Istnieją jednak dwie główne różnice między tymi dwoma interfejsami API -
StAX to PULL API, podczas gdy SAX to PUSH API. Oznacza to, że w przypadku parsera StAX aplikacja kliencka musi poprosić parser StAX o pobranie informacji z XML, gdy zajdzie taka potrzeba, ale w przypadku parsera SAX aplikacja kliencka jest wymagana do uzyskania informacji, gdy parser SAX powiadomi aplikację kliencką o tych informacjach jest dostępny.
StAX API może czytać i zapisywać dokumenty XML. Używając SAX API, XML można tylko czytać.
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 czytnik „kursora”, 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 będzie zużywać 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 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 podczas ich przetwarzania 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, białe znaki itp.
Klasa XMLEventWriter
Ten interfejs określa metody tworzenia zdarzenia.
add(Event event) - Dodaje zdarzenie zawierające elementy do XML.
Klasa XMLStreamReader
Ta klasa zapewnia iterator zdarzeń, które mogą być używane do iteracji po zdarzeniach podczas ich przetwarzania 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() - Służy do uzyskania nazwy elementu
Klasa XMLStreamWriter
Ten interfejs określa metody tworzenia zdarzenia.
writeStartElement(String localName) - Dodaje element początkowy o podanej nazwie.
writeEndElement(String localName) - Dodaje element końcowy do podanej nazwy.
writeAttribute(String localName, String value) - Zapisuje atrybut do elementu.