StAX

De Viquipèdia
Jump to navigation Jump to search

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