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 :
    • public void startDocument() throws SAXException
    • public void endDocument() throws SAXException
    • public void startElement(String nspURI, String localName, String qName, Attributes atts) throws SAXException
    • public void characters(char ch, int start, int length) throws SAXException
    • ...

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 d’apparition d’erreurs.
  • 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 d’entité.
  • 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