Streaming API for XML ( StAX ) est une interface de programmation d'application ( API ) permettant de lire et d'écrire des documents XML , issue de la communauté du langage de programmation Java .
Traditionnellement, les API XML sont soit :
- Basé sur DOM - l'ensemble du document est lu en mémoire sous forme d' arborescence pour un accès aléatoire par l'application appelante
- basé sur les événements - l'application s'enregistre pour recevoir des événements lorsque des entités sont rencontrées dans le document source.
Les deux présentent des avantages : DOM , par exemple, permet un accès aléatoire au document, et un algorithme piloté par événement comme SAX a une faible empreinte mémoire et est généralement beaucoup plus rapide.
Ces deux métaphores d'accès peuvent être considérées comme des opposés polaires. Une API basée sur un arbre permet un accès et une manipulation illimités et aléatoires, tandis qu'une API basée sur un événement est un passage « en une seule fois » à travers le document source.
StAX a été conçu comme une médiane entre ces deux opposés. Dans la métaphore StAX, le point d'entrée programmatique est un curseur qui représente un point dans le document. L'application déplace le curseur vers l'avant, « extrayant » les informations de l'analyseur selon ses besoins. Cela diffère d'une API basée sur des événements, comme SAX, qui « pousse » les données vers l'application, obligeant l'application à maintenir l'état entre les événements si nécessaire pour suivre l'emplacement dans le document.
Origines
StAX trouve ses racines dans un certain nombre d'API d'extraction incompatibles pour XML, notamment XMLPULL, dont les auteurs (Stefan Haustein et Aleksander Slominski) ont collaboré, entre autres, avec BEA Systems , Oracle , Sun et James Clark .
Exemples
Extrait de la spécification JSR-173 • Final, V1.0 (utilisé dans le cadre d'une utilisation équitable).
Citation:
- L'API Java suivante montre les principales méthodes de lecture XML dans l'approche du curseur.
interface publique XMLStreamReader { public int next () throws XMLStreamException ; public boolean hasNext () throws XMLStreamException ; public String getText (); public String getLocalName (); public String getNamespaceURI (); // ...autres méthodes non affichées }
- Le côté écriture de l'API dispose de méthodes qui correspondent au côté lecture pour les types d'événements « StartElement » et « EndElement ».
interface publique XMLStreamWriter { public void writeStartElement ( String localName ) throws XMLStreamException ; public void writeEndElement () throws XMLStreamException ; public void writeCharacters ( String text ) throws XMLStreamException ; // ... autres méthodes non affichées }
- 5.3.1 XMLStreamReader
- Cet exemple illustre comment instancier une fabrique d'entrée, créer un lecteur et parcourir les éléments d'un document XML.
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance () ; XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader ( ... ) ; while ( xmlStreamReader.hasNext ( ) ) { xmlStreamReader.next ( ) ; }