Version PDF - Jean

publicité
TP : Java et XML
1
L’API SAX (Simple API for XML)
• Commencez par lire la partie du cours qui présente l’API SAX événementielle 1 de lecture d’un document
XML.
• Préparez un projet Java Eclipse.
• Copiez dans ce projet le fichier XML calendrier (et sa DTD) du TP XPATH.
• Faites fonctionner l’exemple SAX du cours en ajoutant à la classe proposée la méthode main :
public static void main(String args[]) throws Exception {
SaxSample parser = new SaxSample();
parser.parseXmlFile("siecle.xml");
}
• Modifiez l’exemple pour qu’il affiche sur la sortie standard le nom des jours. Démarche :
.
.
.
.
2
prévoyez un indicateur « suis-je dans un jour ? ».
prévoyez un indicateur « suis-je dans un nom ? ».
prévoyez un stockage d’un texte (si je suis dans le nom d’un jour),
si je termine un élément jour/nom , l’afficher.
L’API DOM (Document Object Model)
• Commencez par lire la partie du cours qui présente l’API DOM 2 .
• Faites fonctionner l’exemple DOM du cours.
• Écrivez une méthode qui va explorer l’arbre pour imprimer sur la sortie standard le nom des mois.
Note : depuis la version 1.4 de Java, les API SAX, DOM, JAXP et TrAX sont intégrées.
3
L’API JAPX (Java API for XML Processing)
Lisez le cours sur JAXP 3 (notamment les analyseurs et les premières transformations) et tester l’exemple cidessous :
1. 06-java.html#sax
2. 06-java.html#DOM
3. 06-java.html#jaxp
1
package fr.univmed.massat.xml;
import
import
import
import
import
import
javax.xml.parsers.DocumentBuilderFactory;
javax.xml.transform.OutputKeys;
javax.xml.transform.Transformer;
javax.xml.transform.TransformerFactory;
javax.xml.transform.dom.DOMSource;
javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class SampleCreateDom {
public static void main(String[] args) throws Exception {
// création d’un document vide
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().newDocument();
// ajout de noeuds
Element racine = doc.createElement("racine");
racine.appendChild(doc.createTextNode("hello"));
doc.appendChild(racine);
// sérialisation
TransformerFactory myFactory = TransformerFactory.newInstance();
Transformer transformer = myFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "iso-8859-1");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(new DOMSource(doc),
new StreamResult(System.out));
}
}
Utilisez la création d’arbre pour reprendre l’exercice précédent (les noms des mois) afin de placer le résultat dans
un arbre qui sera sérialisé sur la sortie standard :
<noms>
<nom>Janvier 1900</nom>
<nom>Janvier 1901</nom>
...
</noms>
4
L’API TrAX (Transformation API for XML)
Notre objectif est maintenant d’appliquer une feuille de style XSL. Commencez par la lecture du cours sur les
transformations 4 .
Reprenez l’exercice précédent, et construisez une feuille de style (simple) pour produire du XHTML à partir du
document XML qui liste les noms de mois. 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 application doit maintenant imprimer la liste des noms d’unités sous la forme d’une page XHTML
(en ISO-8859 indentée).
4. 06-java.html#trans
2
5
Utiliser Java API for XML Binding (JAXB)
Nous allons utiliser JAXB 5 (Java Architecture for XML Binding) le framework de mise en correspondance
Java/XML (qui est inclus dans java 1.6+).
1. Testez l’utilisation du compilateur JAXB (l’application qui génère automatiquement les classes java à partir
d’une DTD ou d’un schéma) :
xjc -help
2. Générez les classes java qui correspondent à votre DTD :
mkdir -p src
xjc -dtd -p monpkg -d src nom-de-votre-DTD
Par curiosité, parcourez les fichiers Java générés.
3. Préparer le code principal de votre application (fichier EssaiJAXB.java dans le répertoire src ) :
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class EssaiJAXB {
public static void main(String[] args) throws Exception {
for (int i = 0; i < args.length; i++) {
test(args[i]);
}
}
private static void test(String fileName) throws Exception {
JAXBContext context = JAXBContext.newInstance("monpkg");
// creer les instances a partir du fichier XML
Unmarshaller u = context.createUnmarshaller();
Object o = u.unmarshal(new File(fileName));
// serialiser les instances dans un document XML
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(o, System.out);
}
}
4. Compilation de ces classes :
mkdir -p classes
javac -d classes -sourcepath src/ src/EssaiJAXB.java src/monpkg/*.java
5. Exécution de votre application :
5. http ://www.oracle.com/technetwork/articles/javase/index-140168.html
3
java EssaiJAXB votre-fichier-xml
6. Vous pouvez maintenant modifier votre application pour qu’elle ajoute une nouvelle unité avant de la
sérialiser.
7. Le compilateur JAXB fonctionne mieux avec un schéma à la place de la DTD. Pour obtenir de manière
automatique un schéma à partir de votre DTD, suivez les indications de ce tutoriel 6 .
8. Vous pouvez maintenant utiliser xjc pour régénérer vos classes et testez le résultat. Quelles sont les
différences par rapport à la version précédente ?
9. Vous trouverez plus d’explications et d’exemples dans The Java Web Services Tutorial 7 (notamment les
chapitres 2 et 3) ou dans le cours en ligne de J.M. Doudoux 8 .
6. http://www.dotkam.com/2008/05/28/generate-xsd-from-xml/
7. http://download.oracle.com/docs/cd/E17802 01/webservices/webservices/docs/2.0/tutorial/doc/index.html
8. http://www.jmdoudoux.fr/java/dej/chap-jaxb.htm
4
Téléchargement