Stax Article Index for
Stax
Articles about
Stax
 

Information About

Stax




Traditionally, XML APIs are either:
  • tree based - the entire document is read into memory as a tree structure for random access by the calling application

  • event based - the application registers to receive events as entities are encountered within the source document.

  • Both have advantages; the former (for example, DOM ) allows for random access to the document, the latter (e.g. SAX ) requires a small memory footprint so is typically ''much'' faster.


These two access metaphors can be thought of as polar opposites. A tree based API allows unlimited, random, access and manipulation, while an event based API is a 'one shot' pass through the source document.

StAX was designed as a median between these two opposites. In the StAX metaphor, the programmatic entry point is a cursor that represents a point within the document. The application moves the cursor forward - 'pulling' the information from the parser as it needs. This is different from an event based API - such as SAX - which 'pushes' data to the application - requiring the application to maintain state between events as necessary to keep track of location within the document.


ORIGINS

StAX has its roots in a number of incompatible pull APIs for XML, most notably XMLPULL, the authors of which (Stefan Haustein and Aleksandr Slominski) collaborated with, amongst others .


EXAMPLES


From JSR-173 Specification• Final, V1.0 (used under fair use).

Quote:
:The following Java API shows the main methods for reading XML in the cursor approach.

// Java
public interface XMLStreamReader {
public int next() throws XMLStreamException;
public boolean hasNext() throws XMLStreamException;
public String getText();
public String getLocalName();
public String getNamespaceURI();
// ...othermethodsnotshown
}

:The writing side of the API has methods that correspond to the reading side for “StartElement” and “EndElement” event types.

// Java
public interface XMLStreamWriter {
public void writeStartElement(String localName) throws XMLStreamException;
public void writeEndElement() throws XMLStreamException;
public void writeCharacters(String text) throws XMLStreamException;
// ...othermethodsnotshown
}

:5.3.1 XMLStreamReader
:This example illustrates how to instantiate an input factory, create a reader and iterate over the elements of an XML document.

XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader r = f.createXMLStreamReader(... );
while (r.hasNext()) {
r.next();
}



IMPLEMENTATIONS

  • http://stax.codehaus.org/ Reference Implementation

  • Woodstox Open source StAX implementation

  • https://sjsxp.dev.java.net is Sun's Stax implementation



SEE ALSO

Competing and complementary ways to process XML in Java (ordered loosely based on initial date of introduction):
  • DOM Document Object Model is the first standardized, language/platform-independent tree-based xml processing model. (note: there are also alternate Java tree models like [Dom4j , [XOM]).

  • SAX The standard "XML push" API

  • JAXB Java XML Binding API: works on top of another parser (usually streaming parser), binds contained data to/from Java objects.

  • Javolution provides a real-time StAX-like implementation which does not force object creation (e.g. String) and has no adverse effect on memory footprint/garbage collection (Note: To reduce object creation, regular StAX implementations have to maintain lookup tables to retrieve and reuse frequently used String objects).

  • VTD-XML A new non-extractive XML processing model supporting random access and XPath



EXTERNAL LINKS