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