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