Lire un fichier XML via l'API SAX en JAVA

Gestion du contenu

DéfinitionPrincipe

Cette première interface intitulée ContentHandler, permet d'analyser le flux entrant à l'aide des événements. Il suffit de redéfinir les fonctions pour avoir le comportement souhaité.

FondamentalLe début et la fin d'un document

Dans l'interface ContentHandler, ces événements sont gérés par les deux fonctions startDocument() et endDocument().

La fonction startDocument() est la première fonction qui est appelée parmi toutes les autres. De même endDocument() est la dernière fonction qui est appelée à la fin de l'analyse.

CTRL+C pour copier, CTRL+V pour coller
1
@Override
2
public void startDocument() throws SAXException {
3
    System.out.println("Debut de l'analyse du document");
4
}
5
6
@Override
7
public void endDocument() throws SAXException {
8
    System.out.println("Fin de l'analyse du document" );
9
}
@Override
public void startDocument() throws SAXException {
    System.out.println("Debut de l'analyse du document");
}

@Override
public void endDocument() throws SAXException {
    System.out.println("Fin de l'analyse du document" );
}

FondamentalLa gestion des espaces de nommage (namespaces)

L'interface propose deux fonctionnements, startPrefixMapping() et endPrefixMapping() qui gère les espaces de nommage, ils sont invoqués au début et à la fin d'un prefix mapping.

CTRL+C pour copier, CTRL+V pour coller
1
@Override
2
public void startPrefixMapping(String prefix, String URI) throws SAXException {
3
}
4
5
Override
6
public void endPrefixMapping(String prefix) throws SAXException {
7
}
@Override
public void startPrefixMapping(String prefix, String URI) throws SAXException {
}

Override
public void endPrefixMapping(String prefix) throws SAXException {
}
CTRL+C pour copier, CTRL+V pour coller
1
<root>
2
3
	<h:table xmlns:h="http://www.w3.org/TR/html4/">
4
	  <h:tr>
5
		  <h:td>Apples</h:td>
6
		  <h:td>Bananas</h:td>
7
	  </h:tr>
8
	</h:table>
9
10
	<f:table xmlns:f="http://www.w3schools.com/furniture">
11
	  <f:name>African Coffee Table</f:name>
12
	  <f:width>80</f:width>
13
	  <f:length>120</f:length>
14
	</f:table>
15
16
</root>
<root>

	<h:table xmlns:h="http://www.w3.org/TR/html4/">
	  <h:tr>
		  <h:td>Apples</h:td>
		  <h:td>Bananas</h:td>
	  </h:tr>
	</h:table>

	<f:table xmlns:f="http://www.w3schools.com/furniture">
	  <f:name>African Coffee Table</f:name>
	  <f:width>80</f:width>
	  <f:length>120</f:length>
	</f:table>

</root>

FondamentalLa gestion d'un élément

Un élément correspond à des balises, notamment une balise ouvrante et une balise fermante.

startElement() est déclenchée au démarrage d'un élément XML (balise ouvrante), elle a plusieurs paramètres dont l'espace de nommage, le nom de la balise, et les attributs de cette balise s'ils existent.

endElement() est déclenchée à la fin du traitement d'une balise.

CTRL+C pour copier, CTRL+V pour coller
1
void startElement(String uri, String localName, String rawName,  Attributes atts)
2
                  throws SAXException
3
4
void endElement(String uri, String localName, String qName)
5
                throws SAXException
void startElement(String uri, String localName, String rawName,  Attributes atts)
                  throws SAXException

void endElement(String uri, String localName, String qName)
                throws SAXException
CTRL+C pour copier, CTRL+V pour coller
1
<h:td id="1">Apples</h:td>
2
3
<!-- 
4
    uri : http://www.w3.org/TR/html4/
5
    localName : td  
6
    rawName : h:td
7
    Attribut : id = 1
8
-->
9
<h:td id="1">Apples</h:td>

<!-- 
    uri : http://www.w3.org/TR/html4/
    localName : td  
    rawName : h:td
    Attribut : id = 1
-->

FondamentalContenu d'un élément (#PCDATA)

Quand l'analyseur repère l'ouverture et la fermeture d'une balise, il sera capable de récupérer le contenu de cette balise.

characters() permet de récupérer le contenu texte qui est présent entre la balise ouvrante et la balise fermante.

Elle a trois paramètres : la chaîne de caractères, le rang du premier caractère à traiter et la longueur de cette chaîne de caractère.

CTRL+C pour copier, CTRL+V pour coller
1
void characters(char[] ch, int start, int length)
2
                throws SAXException
void characters(char[] ch, int start, int length)
                throws SAXException

ExempleSimple traitement par ContentHandler

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)