Simple API for XML
From Wikipedia, the free encyclopedia
Remove ads
SAX (Simple API for XML) és una forma de processar els documents XML basada en events.[1] Amb SAX s'obté una forma alternativa a l'estàndard Document Object Model (DOM) de llegir les dades contingudes en un document XML.
![]() |
Aquest article podria incomplir els criteris generals d'admissibilitat. |
Originalment es va pensar per Java però es pot trobar en molts altres llenguatges de programació: C, Perl o Python. SAX no està definida en cap estàndard formal sinó que s'ha agafat l'especificació de Java com a normativa de referència.[2]
SAX processa els documents sense haver-los de carregar completament, en contrast amb el que fa DOM que necessita carregar tot el document per poder-hi treballar.[3]
El funcionament és senzill: el parser va llegint el fitxer i va generant events cada vegada que es troba alguna cosa rellevant: Començament o final d'un document, inici o final d'una etiqueta, contingut, etc.
En general un parser SAX:
- Detecta quan comença i acaba un element, el document o un conjunt de caràcters
- Gestiona els espais de noms
- Comprova que els documents estiguin ben formats
Remove ads
Avantatges
- És ràpid perquè només requereix llegir el document
- No carrega tot el document a memòria, ja que genera els events a mesura que els va llegint
- És senzill
Inconvenients
- El tractament seqüencial que fa dels documents implica que:
- No pot tornar enrere.
- No és eficient llegint dades aleatòriament (perquè ha de llegir tot el document)
- No serveix per crear documents XML
Exemple
En llenguatge Java s'ha de crear un parser SAX (SAXParser) a partir d'un objecte de fàbrica de parsers(SAXParserFactory). Un cop creat al parser se li proporcionen el fitxer a processar (test.xml) i la classe que rebrà els events (Processar).
import java.io.*;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class Sacseja throws ParserConfigurationException, SAXException, IOException{
public static void main(String[] argv)
{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
parser.parse(new File("test.xml"), new Processar());
}
}
Després només cal implementar la classe Processar en la que es reescriuran les funcions que facin referència als events que es vulguin tractar. En aquest exemple es volen comptar el nombre d'etiquetes que hi ha i, per tant, es sobreescriuen startElement que es cridarà cada cop que arribi una etiqueta i endDocument per mostrar el resultat final
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Procesar extends DefaultHandler {
int numelements=0;
public void endDocument() throws SAXException{
System.out.println("Total etiquetes: " + numelements);
}
public void startElement(String uri, String localName,
String qName, Attributes attributes) {
numelements++;
}
}
El programa ens imprimirà per pantalla el nombre d'etiquetes que hi ha en el document.
Referències
Enllaços externs
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads