Streaming API for XML (StAX) és una interfície de programació de programes per llegir i escriure documents XML que intenta superar els problemes que tenen els dos sistemes tradicionals de llegir fitxers XML: sistemes basats en events (SAX és el més habitual) i DOM.

StAX intenta aprofitar-se del millor dels dos sistemes:

  • No necessita carregar tot el document a memòria com fan els sistemes basats en DOM de manera que consumeix pocs recursos
  • Permet que sigui l'usuari i no el parser el que controla el processament del fitxer XML
  • Permet crear documents XML com ho fa DOM

StAX va ser dissenyat pensant en el concepte de cursor (un punt dins del document) que és mogut per l'aplicació a mesura que li fa falta la informació. Funciona amb un sistema conegut com a Pull parsing que es contraposa a la forma de treballar de SAX (Push parsing) on és el parser el que controla la sortida de la informació i l'aplicació es veu obligada a mantenir l'estat dels events per saber on està en el document.

Exemple modifica

Suposem que partim del següent fitxer XML del que es vol fer un llistat amb el nom dels alumnes

<?xml version="1.0" encoding="UTF-8"?>
<classe>
 <alumne>
 <nom>Federicu Pi</nom>
 </alumne>
 <alumne>
 <nom>Marcelinu Paivinu</nom>
 </alumne>
 <alumne>
 <nom>Filomeno Garcia</nom>
 </alumne>
</classe>

El primer és crear un parser StAX a partir de l'objecte de referència XMLStreamReader al que li passem la referència al fitxer XML:

FileReader r = new FileReader("alumnes.xml");
XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(r);

Un cop es té el parser només cal anar avançant pel fitxer (next()) fins que es troba l'etiqueta que es vol (*nom*) i s'imprimeix per pantalla el seu contingut. La funció hasNext() serveix per comprovar quan s'ha arribat al final del fitxer

while (parser.hasNext())
{
 int eventCode = parser.next();
 if (eventCode == XMLStreamReader.START_ELEMENT)
 { 	 
 if ("nom".equals(parser.getLocalName()) { 
 System.out.println(parser.getElementText());
 }
 }
}

Referències modifica

Enllaços externs modifica

Implementacions en llenguatge Java