SAX - Simple API for XML
Par PlaceOweb le jeudi, septembre 14 2006, 00:49 - JAVA - Lien permanent
SAX Simple API for XML, à la découverte de XMLReader pour parser un flux XML en java.
API non standard développé par les membres du forum XML-DEV Parseur XML
- Orienté événement
- Parsing dynamique
Interfaces
- XMLReader
- ContentHandler
- DTDHandler
- ErrorHandler
- ...
Classes
- InputSource
Exceptions
- SAXException
- ...
Notez bien, les interfaces :
Parser : Deprecated. This interface has been replaced by the SAX2 XMLReader interface, which includes Namespace support.
XMLReader : Interface for reading an XML document using callbacks.
org.xml.sax.XMLReader
- Classe implantée par tout parser SAX
- Méthodes
- public void setContentHandler(ContentHandler handler)
- public void setDTDHandler(DTDHandler handler)
- public void setErrorHandler(ErrorHandler handler)
- public void parse(InputSource input) throws java.io.IOException, SAXException
- ...
org.xml.sax.ContentHandler
- Handler le plus important. Toutes les applications SAX doivent implanter un ContentHandler
- Méthodes :
org.xml.sax.DTDHandler
- Handler utilisé pour avoir des informations sur les entitées non parsable.
- Méthodes :
- public void notationDecl(String name, String publicId, String systemId) throws SAXException
- public void unparsedEntityDecl(String name, String publicId, String systemId, String notationName) throws SAXException
org.xml.sax.ErrorHandler
- Handler utilisé pour effectuer un traitement lors dapparition derreurs.
- Méthodes :
- public void warning(SAXParseException exception) throws SAXException
- public void error(SAXParseException exception) throws SAXException
- public void fatalError(SAXParseException exception) throws SAXException
org.xml.sax.EntityResolver
- Handler utilisé pour effectuer un traitement lors de la résolution dentité.
- Méthode :
- public InputSource resolveEntity(String publicId, String systemId) throws SAXException, java.io.IOException
org.xml.sax.Attributes
- Liste d'attributs
- Méthodes :
- public int getLength()
- public java.lang.String getLocalName(int index)
- public java.lang.String getValue(int index)
- ...
org.xml.sax.Locator
- Utiliser pour connaître la position du parser dans le fichier
- Les parser SAX ne sont pas obligé de fournit un Locator
- Méthodes :
- public int getColumnNumber()
- public int getLineNumber()
- ...
org.xml.sax.InputSource
- Tout input XML doit être encapsulé dans un InputSource
- Méthodes :
- public InputSource(java.io.Reader characterStream)
- public InputSource(java.io.InputStream byteStream)
- ...
Exemple de Programme SAX
package test; public class ContentTest extends org.xml.sax.helpers.DefaultHandler { org.xml.sax.Locator _locator; public void startDocument() {System.out.println("Le document commence"); } public void endDocument() {System.out.println("Le document finit");} public void startElement(java.lang.String namespaceURI, java.lang.String localName,java.lang.String rawName, org.xml.sax.Attributes atts) throws org.xml.sax.SAXException { System.out.println("element : "+localName+" commence"+"col = " +_locator.getColumnNumber()+" ; line ="+_locator.getLineNumber() );} public void endElement(java.lang.String namespaceURI,java.lang.String localName, java.lang.String rawName, org.xml.sax.Attributes atts) throws org.xml.sax.SAXException { System.out.println("element : "+localName+" finit"); } public void setDocumentLocator(org.xml.sax.Locator locator) {_locator = locator;} } package test; public class DTDTest extends org.xml.sax.helpers.DefaultHandler { public void notationDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId) throws org.xml.sax.SAXException { System.out.println("Notation Declaration"); } public void unparsedEntityDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId, java.lang.String notationName) throws org.xml.sax.SAXException { System.out.println("Unparsed entity Decl"); } } package test; public class EntityTest extends org.xml.sax.helpers.DefaultHandler { public org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId) throws org.xml.sax.SAXException{ System.out.println("resolve an entity"); return null; } } package test; public class ErrorTest extends org.xml.sax.helpers.DefaultHandler { public void warning(org.xml.sax.SAXParseException exception) throws org.xml.sax.SAXException { System.out.println("Got a Warning"); } public void error(org.xml.sax.SAXParseException exception) throws org.xml.sax.SAXException { System.out.println("Got an Error"); } public void fatalError(org.xml.sax.SAXParseException exception) throws org.xml.sax.SAXException { System.out.println("Got a fatal Error"); } } package test; public class Parse { public static void main(String[] args) { try { org.xml.sax.XMLReader parser = (org.xml.sax.XMLReader) Class.forName("org.apache.xerces.parsers.SAXParser").newInstance(); ContentTest _content = new ContentTest(); _content.setDocumentLocator(new org.xml.sax.helpers.LocatorImpl()); parser.setContentHandler(_content); parser.setErrorHandler(new ErrorTest()); parser.setEntityResolver(new EntityTest()); parser.setDTDHandler(new DTDTest()); parser.parse("UML.xml");} catch (org.xml.sax.SAXParseException spe) {spe.printStackTrace(System.err);} catch (org.xml.sax.SAXException se) {se.printStackTrace(System.err);} catch (Exception e) {e.printStackTrace(System.err);} } }
Conclusion
- Type de Parser XML
- Standard « Internet »
- Orienté événement
- Utilisé par les serveurs Web