Lire un fichier XML via l'API SAX en JAVA

Notions Avancées

DéfinitionFeatures & Properties

SAX propose aussi un mécanisme pour ajouter des features et des properties depuis sa version 2.0, par exemple l'activation de la validation d'un fichier XML, la gestion des espaces de nommage.

Pour cela, on a les méthode setProperty(), setFeature(), getProperty() et getFeature(). Les setters prennent l'URL de la propriété ou la fonctionnalité et sa valeur.

Toutes les features sont présentées dans ce lien : http://xerces.apache.org/xerces2-j/features.html

Toutes les properties sont présentées dans ce lien : http://xerces.apache.org/xerces2-j/properties.html

Features

DéfinitionValidation

La validation est un mécanisme très important qui est proposé par SAX, il permet l'activation ou la désactivation de la validation d'un fichier XML, par exemple avec un DTD qui est inclus dans le fichier.

CTRL+C pour copier, CTRL+V pour coller
1
reader.setFeature("http://xml.org/sax/features/validation", true);
reader.setFeature("http://xml.org/sax/features/validation", true);

AttentionValidation vs DTD

Ne pas confondre entre la validation et le traitement de la DTD. La validation permet juste de prendre en compte le traitement de la DTD qui est associé au fichier XML, au lieu d'être ignoré.

Si la valeur de la validation est à false, même si vous avez bien un DTD qui est référencé dans le fichier XML, ce dernier sera ignoré lors du traitement de l'analyseur de SAX.

DéfinitionNamespaces

SAX nous propose le Namespaces feature pour la gestion des espaces de nommage.

Par default, même si votre fichier XML contient des namespaces, l'analyseur ne prendra pas en compte ce dernier, c'est pour cela que l'utilisation de cette fonctionnalité est indispensable quand le fichier XML contient des espaces de nommage.

CTRL+C pour copier, CTRL+V pour coller
1
reader.setFeature("http://xml.org/sax/features/namespaces", true);
2
reader.setFeature("http://xml.org/sax/features/namespace-prefixes",true);
reader.setFeature("http://xml.org/sax/features/namespaces", true);
reader.setFeature("http://xml.org/sax/features/namespace-prefixes",true);

EntityResolve

DéfinitionPrincipe

Résoudre les références externes qui sont incluses dans un fichier XML via un publicID ou un systemID. Ils peuvent être soit une référence pour un fichier, un URL ou bien une ressource.

L'interface a pour but de remplacer ces références avec d'autres que le programmeur souhaite intégrer.

Pour implémenter cette interface, il suffit de l'enregistrer dans l'instance du XMLReader avec la méthode setEntityResolver().

CTRL+C pour copier, CTRL+V pour coller
1
public class myEntityResolver implements EntityResolver{
2
    @Override
3
    public InputSource resolveEntity(String publicID, String systemID) throws SAXException, IOException {
4
       
5
    }
6
}
public class myEntityResolver implements EntityResolver{
    @Override
    public InputSource resolveEntity(String publicID, String systemID) throws SAXException, IOException {
       
    }
}

La classe DefaultHandler

DéfinitionPrincipe

La classe DefaultHandler implémente les quatre interfaces de l'API SAX, notamment ContentHandler, ErrorHandler, DTDHandler et EntityResolver. Le but de cette classe et de pouvoir proposer au programmeur une classe qui contient l'ensemble de toutes les fonctions que les interfaces proposent, et redéfinir seulement celles qui l'intéressent.

Pour utiliser cette classe, il suffit de faire un héritage (maclasse extends DefaultHandler).

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Mourad SAADI, 2015 (Contributions : Stéphane Crozat, les étudiants de NF29) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)