Le but de cet article est de vous faire décrouvrir le fonctionnement de l'API DOM4J.
Cet article sera agrémenté d'exemples simples allant de la simple création d'un nouveau fichier xml, jusqu'à la modification et la sauvegarde de celui-ci.
DOM4J est un API open source écrite en java permettant de créer, modifier, enregistrer des documents au format xml.
Cette API est compatible avec les standards DOM,SAX et JAXP.
1. Créer son premier document xml
Nous allons tout de suite passer à la création d'un premier document xml sans toutefois le sauvegarder, nous afficherons simplement le résultat sur la sortie standard.
Cette création n'a rien de compliqué, il suffit juste d'ajouter les éléments les uns à la suite des autres.
Create.java
package com.developpez.dom4j.exemples;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
publicclass CreateXML {
public CreateXML()
{
//Création du document
Document document = DocumentHelper.createDocument();
//Ajout de l'élément racine
Element rootElement = document.addElement("developpez");
//Ajout d'un élément dans l'élément racine
Element users = rootElement.addElement("utilisateurs");
//Ajout d'un élément dans l'élément utilisateurs avec un attribut ainsi que le texte dans l'élément
Element personnes = users.addElement("nom").addAttribute("type","M").addText("Stessy Delcroix");
try
{
//Méthode utilisée pour écrire sur la sortie standard //le résultat du document créé
writeOutput(document);
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
publicstaticvoid main(String[] args)
{
new CreateXML();
}
//Cette méthode sera expliquée dans la section suivantepublicvoid writeOutput(Document document) throws IOException
{
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter( System.out, format );
writer.write( document );
}
}
Passons maintenant à la sauvegarde du document créé précédemment.
La méthode la plus simple consiste à enregistrer le document sans aucune indentation ni retour à la ligne.
Voici un petit exemple:
writeCompactOutput()
publicvoid writeCompactOutput(Document document) throws IOException
{
OutputFormat compactFormat = OutputFormat.createCompactFormat();
XMLWriter writer = new XMLWriter (new FileWriter("compactOutput.xml"),compactFormat);
writer.write(document);
writer.close();
}
Pas très esthétique à regarder me direz-vous.
Pour pallier à ce manque d'esthétisme, il existe une méthode statique de la classe
OutputFormat qui va indenter les éléments enfants, et qui va également effectuer
un retour à la ligne pour chaque nouvel élément trouvé.
Voici un exemple permettant un tel formattage:
writePrettyOutput()
publicvoid writePrettyOutput(Document document) throws IOException
{
//Voici la méthode statique permettant le formatage //du document pour une lecture aisée du document xml
OutputFormat prettyFormat = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter (new FileWriter("prettyOutput.xml"),prettyFormat);
writer.write(document);
writer.close();
}
Et enfin voici une dernière méthode vous permettant de choisir le style de formatage personnel en fonction des paramètres passés à celle-ci
writePersonalOutput()
publicvoid writePersonalOutput(Document document, int indentationSize, boolean includeNewLine, boolean trimText) throws IOException
{
//instanciation d'un format de sortie
OutputFormat personalFormat = new OutputFormat();
//application d'une indentation
personalFormat.setIndentSize(indentationSize);
//accepter ou non les retours à la ligne
personalFormat.setNewlines(includeNewLine);
//accepter ou non d'enlever les caractères d'espacement en début et fin de texte
personalFormat.setTrimText(trimText);
XMLWriter writer = new XMLWriter (new FileWriter("personalOutput.xml"),personalFormat);
writer.write(document);
writer.close();
}
L'appel de la méthode writePersonalOutput() avec les paramètres :
indentationSize = 2
includeNewLine = true;
trimText = true;
équivaut à appeler la méthode writePrettyOutput();