TP Compilation / XML Séance 6 : SAX : Simple API for XML (Miage L3 - Avril 2005) Ce TD est consacré à l'utilisation de SAX. Nous utiliserons les API SAX pour lire, écrire et modifier des données XML. Plus particulièrement nous allons utiliser les packages javax.xml.* et org.xml.sax.* fournis par SUN dans l'API JAXP (Java API for XML Parsing) : http://java.sun.com/xml. Dans la suite du TD nous utiliserons systématiquement les APIs SAX 2. Récupérez et installez l'archive : http://deptinfo.unice.fr/~lips/Miage_L3/Compil_XML/TDs/TD6/Fournitures/jaxp-1.1.tgz Celle-ci contient la javadoc de l'API JAXP donc vous aurez besoin pour les exercices suivants. Lecture (Parsing) Compteur Écrire une classe compteur qui comptabilise le nombre d'éléments et le nombre de caractères présents dans le document qui lui est fourni. Écrire une méthode main qui lit un fichier XML et renvoie les informations précédentes à la fin de la lecture. Pour effectuer celà, votre classe Counter devra étendre la classe DefaultHandler. Écriture L'écriture d'un document XML à partir d'un programme est appelée sérialisation. Les classes utilisées pour la sérialisation font partie de jaxp sous le package javax.xml.transform.*. Écriture simple A l'aide de ces classes, faire un programme qui génère la sortie suivante : <?xml version="1.0"?> <test>Hello world !</test> Encodage, espaces, etc... En modifiant l'exemple précédent, produire la sortie suivante dans le fichier test.xml : <?xml version="1.0" encoding="ISO-8859-1"?> <test> <!-- coucou --> Hello world ! <![CDATA[test <binaire> text]]> </test> Jean-Pierre Lips (d’après Stéphane Lavirotte) Avril 2005 Transformations Pour ceux qui ont encore du temps, nous allons jouer avec les transformations. Identité Écrire un Handler qui se comporte comme une transformation identité (qui ne fait rien) en utilisant la délégation. N'oubliez pas les éléments lexicaux, la gestion des erreurs, etc... Traductions Écrire un programme qui transforme tous les tags ``foo'' en tags ``bar'' et tous les attributes ``foobar'' en ``barfoo''. Écrire un programme qui extrait et affiche le contenu textuel de tous les troisièmes tags ``foo'' (successifs) d'un document dans un nouveau document. Exemple de document source et résultat : <?xml version="1.0"> <test> <bar> <foo>a</foo> <foo>b</foo> <foo>c</foo> </bar> <bar> <foo>aa</foo> <foo>bb</foo> </bar> <foo>aaa</foo> <foo>bbb</foo> <foo>ccc</foo> </test> <?xml version="1.0"> <result> <foo>c</foo> <foo>ccc</foo> </result> Informations complémentaires Vous pouvez consulter le tutorial fourni par SUN à l'adresse suivante : http://java.sun.com/webservices/docs/1.3/tutorial/doc/index.html Il contient les exemples sur lesquels vous venez de travailler ainsi qu'un ensemble d'exemples manipulant des documents XML à l'aide de l'API DOM, SAX et XSLT. Jean-Pierre Lips (d’après Stéphane Lavirotte) Avril 2005