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.