Lien Java-XML (SAX/DOM)

Transcription

Lien Java-XML (SAX/DOM)
TP : Java & XML
L’API SAX (Simple API for XML)
Écrire une petite application SAX1 permettant d’extraire une information particulière d’un fichier XML. Par
Exemple, le nom des unités d’enseignement. Vous pouvez utiliser la JavaDoc du package org.xml.sax2 pour
vous aider.
Pour traiter cette question, vous aurez besoin d’un analyseur compatible SAX. Vous pouvez en télécharger un,
mais il est plus simple d’utiliser celui intégré dans la JRE (Xerces). Pour ce faire, vous pouvez donner son nom
en toute lettre dans le code
XMLReader xr = new com.sun.org.apache.xerces.internal.parsers.SAXParser();
mais dans ce cas, il existe un lien entre votre application et la version de la JRE (en l’occurrence la 5.0). Une
solution préférable consiste à passer par l’interface JAXP pour se procurer l’analyseur SAX par défaut de la JRE
sans savoir qu’il s’agit de Xerces :
// version JAXP
XMLReader xr = javax.xml.parsers.SAXParserFactory.
newInstance().
newSAXParser().
getXMLReader();
Note : depuis la version 1.4 de Java, les API SAX, DOM, JAXP et TrAX sont intégrées.
L’API JAXP/DOM (Document Object Model)
Écrire une petite application DOM permettant d’imprimer sur la sortie standard la liste des noms des unités d’enseignement (lecture du document et parcours de l’arbre). Vous pouvez utiliser la JavaDoc du package org.w3c.dom3
pour vous aider.
L’API TrAX (Transformation API for XML)
Construire un arbre DOM
Reprenez l’exercice précédent, et construisez un document DOM qui contient le résulat. Imprimez ce document
(sous sa forme XML) en utilisant l’API TraX (Transformation API for XML). Pour ce faire, créer un Transformer
avec l’aide d’un TransformerFactory. Vous devrez utiliser les packages suivants :
– package javax.xml.parsers4 : Interface vers la analyseurs JAXP,
– package javax.xml.transform5 : API TRaX de transformation,
– package javax.xml.transform.dom6 : API TRaX spécifique à DOM,
– package javax.xml.transform.sax7 : API TRaX spécifique à SAX,
1
http://www.saxproject.org
http ://www.dil.univ-mrs.fr/docs/java/api/org/xml/sax/package-summary.html
3
http ://www.dil.univ-mrs.fr/docs/java/api/org/w3c/dom/package-summary.html
4
http ://www.dil.univ-mrs.fr/docs/java/api/javax/xml/parsers/package-summary.html
5
http ://www.dil.univ-mrs.fr/docs/java/api/javax/xml/transform/package-summary.html
6
http ://www.dil.univ-mrs.fr/docs/java/api/javax/xml/transform/dom/package-summary.html
7
http ://www.dil.univ-mrs.fr/docs/java/api/javax/xml/transform/sax/package-summary.html
2
1
– package javax.xml.transform.stream8 : API TRaX spécifique aux streams.
Pour vous aider, voila un petit exemple de création d’un arbre DOM :
public static void main(String[] args)
throws Exception
{
// création d’un document vide
Document doc = javax.xml.parsers.DocumentBuilderFactory.
newInstance().newDocumentBuilder().newDocument();
// ajout de noeuds
Element racine = doc.createElement("racine");
racine.appendChild(doc.createTextNode("hello"));
doc.appendChild(racine);
// sérialisation
javax.xml.transform.Transformer transformer = TransformerFactory.
newInstance().newTransformer();
transformer.setOutputProperty("encoding", "iso-8859-1");
transformer.transform( new DOMSource(doc),
new StreamResult(System.out));
}
Appliquer une feuille de style XSL
Reprenez l’exercice précédent, et construisez une feuille de style (simple) pour produire du HTML à partir du document XML résultat. Faites en sorte de lire cette feuille de style sous la forme d’un document DOM (DOMSource)
et appliquez cette feuille de style (c’est une nouvelle transformation) sur le document XML résultat. Votre programme doit maintenant imprimer du code HTML.
8
http ://www.dil.univ-mrs.fr/docs/java/api/javax/xml/transform/stream/package-summary.html
2