Programmation Java/XML
Il existe dans Java deux packages permettant de manipuler les fichiers XML : la manière SAX (Simple API for XML, navigation via un curseur) et DOM (Document Object Model, navigation via un arbre).
Soit le fichier XML suivant :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Documentation>
<Site Wiki="Wikibooks">
<Livre Wikilivre="Java">
<Page1>Introduction</Page1>
<Page2>Bases du langage</Page2>
<Exemple>XML</Exemple>
</Livre>
</Site>
</Documentation>
Remarque : les espaces sont interdits dans les noms des balises.
La méthode DOM
Le programme suivant génère ce fichier XML dans le même répertoire :
import java.io.File;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
public class XML_Creation_DOM {
public static void main(String argv[]) {
try {
DocumentBuilderFactory XML_Fabrique_Constructeur = DocumentBuilderFactory.newInstance();
DocumentBuilder XML_Constructeur = XML_Fabrique_Constructeur.newDocumentBuilder();
Document XML_Document = XML_Constructeur.newDocument();
Element documentation = XML_Document.createElement("Documentation");
XML_Document.appendChild(documentation);
Element site = XML_Document.createElement("Site");
documentation.appendChild(site);
Attr attribut1 = XML_Document.createAttribute("Wiki");
attribut1.setValue("Wikibooks");
site.setAttributeNode(attribut1);
Element livre = XML_Document.createElement("Livre");
site.appendChild(livre);
Attr attribut2 = XML_Document.createAttribute("Wikilivre");
attribut2.setValue("Java");
livre.setAttributeNode(attribut2);
Element page1 = XML_Document.createElement("Page1");
page1.appendChild(XML_Document.createTextNode("Introduction"));
livre.appendChild(page1);
Element page2 = XML_Document.createElement("Page2");
page2.appendChild(XML_Document.createTextNode("Bases du langage"));
livre.appendChild(page2);
Element example = XML_Document.createElement("Exemple");
example.appendChild(XML_Document.createTextNode("XML"));
livre.appendChild(example);
TransformerFactory XML_Fabrique_Transformeur = TransformerFactory.newInstance();
Transformer XML_Transformeur = XML_Fabrique_Transformeur.newTransformer();
DOMSource source = new DOMSource(XML_Document);
StreamResult resultat = new StreamResult(new File("XML_résultat.xml"));
XML_Transformeur.transform(source, resultat);
System.out.println("Le fichier XML a été généré !");
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
}
}
}
La méthode SAX
Pour lire le fichier ci-dessus, il faut le parser avec un handler dont on redéfinit les méthodes :
import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.xml.sax.helpers.DefaultHandler;
public class XML_Creation_SAX {
public static void main(String[] args) throws Exception {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse("XML_résultat.xml", new DefaultHandler() {
public void startDocument() throws SAXException { System.out.println("startDocument"); }
public void endDocument() throws SAXException { System.out.println("endDocument"); }
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("startElement: " + qName); }
public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("endElement"); }
});
} catch (Exception e) { System.err.println(e); System.exit(1); }
}
}
La méthode JDOM
JDOM utilise les deux bibliothèques précédentes. Si l'erreur suivante survient : error: package org.jdom does not exist, il suffit de télécharger la bibliothèque. Pour utilise la version 2, remplacer les import org.jdom
par des import org.jdom2
.