Aller au contenu

Programmation Java/XML

Un livre de Wikilivres.
Version datée du 16 avril 2020 à 09:25 par DannyS712 (discussion | contributions) (<source> -> <syntaxhighlight> (phab:T237267))

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.