Streaming API for XML (StAX) je aplikační programovací rozhraní (API) pro čtení a zápis dokumentů XML, pocházející z komunity programovacího jazyka Java.

Tradičně jsou XML API buď:

Založeno na DOMu - celý dokument je načten do paměti jako stromová struktura pro náhodný přístup volající aplikací, Založené na událostech - aplikace se registruje k přijímání událostí, jakmile se v zdrojovém dokumentu objeví entity.

Oba mají výhody: například DOM umožňuje náhodný přístup k celému dokumentu, zatímco událostmi řízený algoritmus jako SAX, má malou paměťovou náročnost a je obvykle mnohem rychlejší.

Tyto dva modely přístupu lze považovat za krajní protiklady. API založené na stromech umožňuje neomezený, náhodný přístup a manipulaci, zatímco API založené na událostech představuje „jednorázový“ průchod zdrojovým dokumentem.

Oproti nim byl StAX navržen jako kompromis mezi těmito dvěma protiklady. V modelu StAX je vstupním bodem programový kurzor, který představuje bod v dokumentu. Aplikace posouvá kurzor dopředu – „načítá“ (vytahuje, pull parser) informace z analyzátoru podle potřeby. Tím se liší od API založeného na událostech – jako je SAX – které „vkládá“ (push parser) data do aplikace – což vyžaduje, aby aplikace udržovala stav mezi událostmi podle potřeby pro sledování polohy v dokumentu.

Počátky StAX má své kořeny v řadě nekompatibilních pull API pro XML, zejména v XMLPULL, jehož autoři (Stefan Haustein a Aleksander Slominski) spolupracovali mimo jiné se společnostmi BEA Systems, Oracle, Sun a Jamesem Clarkem.

Příklady Ze specifikace JSR-173 • Final, V1.0 (používá se v rámci fair use).

Následující rozhraní Java API ukazuje hlavní metody pro čtení XML v kurzorovém přístupu. public interface XMLStreamReader { public int next() throws XMLStreamException; public boolean hasNext() throws XMLStreamException; public String getText(); public String getLocalName(); public String getNamespaceURI(); // ...other methods not shown

Strana API pro zápis má metody, které odpovídají straně pro čtení pro typy událostí „StartElement“ a „EndElement“. public interface XMLStreamWriter { public void writeStartElement(String localName) throws XMLStreamException; public void writeEndElement() throws XMLStreamException; public void writeCharacters(String text) throws XMLStreamException; // ...other methods not shown }

5.3.1 XMLStreamReader Tento příklad ilustruje, jak vytvořit instanci vstupní továrny (Factory), dále čtečku (Reader) a iterovat přes prvky XML dokumentu. XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(...); while (xmlStreamReader.hasNext()) { xmlStreamReader.next(); }

Odkazy

Reference

Literatura – SAX, push parser – StAX, pull parser – XMLReader, validující pull parser v PHP

Související články Konkurenční a doplňkové způsoby zpracování XML v Javě (pořadí je volně založeno na datu prvního zavedení):

DOM (Document Object Model), první standardizovaný, jazykově/platformově nezávislý stromový model zpracování XML; alternativní stromové modely Java zahrnují JDOM, Dom4j a XOM SAX (Simple API for XML), standardní XML push API JAXB (Java XML Binding API), pracuje nad jiným parserem (obvykle streamovacím parserem), váže obsažená data do/z objektů Java.

Externí odkazy Úvod do StAX XML.com, Harold, Elliotte Rusty Streamovací API pro XML v jazyce Java (Stax) – Výukový program XMLPull Patterns Článek o návrhových vzorech XML Pull (a StAX) od Aleksandera Slominského. StAX Parser - Článek o API pro kurzory a iterátory od HowToDoInJava.

Kategorie:XML Kategorie:Rozhraní pro programování aplikací