TP : Java et XML
1 L’API SAX (Simple API for XML)
Commencez par lire la partie du cours qui pr´esente l’API SAX ´ev´enementielle 1de lecture d’un document
XML.
Pr´eparez 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 `a la classe propos´ee la m´ethode 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´emarche :
.pevoyez un indicateur «suis-je dans un jour ? ».
.pevoyez un indicateur «suis-je dans un nom ? ».
.pevoyez un stockage d’un texte (si je suis dans le nom d’un jour),
.si je termine un ´el´ement jour/nom , l’afficher.
2 L’API DOM (Document Object Model)
Commencez par lire la partie du cours qui pr´esente l’API DOM 2.
Faites fonctionner l’exemple DOM du cours.
´
Ecrivez une m´ethode 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´egr´ees.
3 L’API JAPX (Java API for XML Processing)
Lisez le cours sur JAXP 3(notamment les analyseurs et les premi`eres transformations) et tester l’exemple ci-
dessous :
1. 06-java.html#sax
2. 06-java.html#DOM
3. 06-java.html#jaxp
1
package fr.univmed.massat.xml;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import 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´eation 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´erialisation
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´eation d’arbre pour reprendre l’exercice pr´ec´edent (les noms des mois) afin de placer le r´esultat dans
un arbre qui sera s´erialis´e 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´ec´edent, et construisez une feuille de style (simple) pour produire du XHTML `a 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´esultat. Votre application doit maintenant imprimer la liste des noms d’unit´es sous la forme d’une page XHTML
(en ISO-8859 indent´ee).
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´en`ere automatiquement les classes java `a partir
d’une DTD ou d’un sch´ema) :
xjc -help
2. G´en´erez les classes java qui correspondent `a votre DTD :
mkdir -p src
xjc -dtd -p monpkg -d src nom-de-votre-DTD
Par curiosit´e, parcourez les fichiers Java g´en´er´es.
3. Pr´eparer le code principal de votre application (fichier EssaiJAXB.java dans le r´epertoire 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´ecution 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´e avant de la
s´erialiser.
7. Le compilateur JAXB fonctionne mieux avec un sch´ema `a la place de la DTD. Pour obtenir de mani`ere
automatique un sch´ema `a partir de votre DTD, suivez les indications de ce tutoriel 6.
8. Vous pouvez maintenant utiliser xjc pour r´eg´en´erer vos classes et testez le r´esultat. Quelles sont les
diff´erences par rapport `a la version pr´ec´edente ?
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
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !