CodeS-SourceS
Rechercher un code, un tuto, une réponse

Gestion des fichiers XML avec JDOM

Décembre 2017


Gestion des fichiers XML avec JDOM



Présentation de l'API


JDom est une api qui permet de lire, éditer et écrire des fichiers XML.


L'api est téléchargeable ici : http://www.jdom.org

Fichier XML


Dans tout ce tutoriel, nous utiliserons le fichier XML suivant pour illustrer les explications :
<diagramme>
	<classe>
		<nom>Classe1</nom>
		<attribut>
			<nom>attribut1</nom>
			<type>String</type>
			<valeur>valeur1</valeur>
		</attribut>
		<methode>
			<nom>afficher</nom>
			<retour>String</retour>
		</methode>
	</classe>
	<classe>
		<nom>Classe2</nom>
		<attribut>
			<nom>VALEUR</nom>
			<type>String</type>
			<valeur>constante</valeur>
			<static />
		</attribut>
	</classe>
</diagramme>

Lire le fichier XML

Parser le document


Pour lire le fichier XML, nous allons nous servir d'un parseur SAX qui permet de lire le fichier mais pas de l'éditer.
Pour instancier le parseur :
SAXBuilder builder = new SAXBuilder();


Pour parser le document, il suffit d'appeler la méthode build() du parseur en lui donnant le fichier à parser en argument :
SAXBuilder builder = new SAXBuilder();
File fichierXML = new File("d:\\diagramme.xml");
Document document = builder.build(fichierXML);


Le fichier est maintenant parsé : on peut accéder aux données en parcourant le document (résultat du parsing).

Récupérer les données


Pour récupérer les données, nous alloons utiliser l'élément racine du document XML, que nous récupérons de la manière suivante :
/* Racine du document XML : dans notre cas <diagramme> */
Element rootNode = document.getRootElement();


A partir d'un élément, nous pouvons accéder à tous ses éléments fils en utilisant la méthode getChildren(String nomFils)
Pour accéder au premier élément fils, on utilise la méthode getChild(String nomFils)
Par exemple :
/* pour accéder aux éléments classe */
List<Element> classes = rootNode.getChildren("classe")
/* Pour accéder au premier attribut */
classes.get(0).getChild("attribut");


Pour récupérer la valeur contenue dans une balise, on utilise la méthode getText() de la classe Element.

Afficher le contenu du fichier


Le code suivant permet de parcourir le fichier XML donné en exemple pour afficher ce qu'il contient.
import java.io.File;
import java.io.IOException;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;


public class AffichageDocument {

	public static void main(String[] args) {
		
		/* Création du parseur */
		SAXBuilder builder = new SAXBuilder();
		
		File fichierXML = new File("d:\\diagramme.xml");
		Document document;
		try {
			/* Parsing du fichier */
			document = builder.build(fichierXML);

			/* Racine du document XML : dans notre cas <diagramme> */
			Element rootNode = document.getRootElement();

			/* On récupère tous les élément classe du fichier XML */
			List<Element> liste = rootNode.getChildren("classe");

			/* Boucle sur tous les éléments "classe" du fichier XML */
			for (Element eClasse : liste) {
				/* Affichage du nom du la classe */
				System.out.println(eClasse.getChild("nom").getText());
				
				/* Récupération de tous les attributs de la classe */
				List<Element> attributs = eClasse.getChildren("attribut");
				for(Element eAttribut : attributs){
					String nomAttribut = eAttribut.getChildText("nom");
					String type = eAttribut.getChildText("type");
					String valeur = eAttribut.getChildText("valeur");
					
					/* Vérification de la présence de la balise <static> */
					Element eStatic = eAttribut.getChild("static");
					String stat="";
					if(eStatic!=null){
						stat="static ";
					}
					
					System.out.println("\t"+stat+type+" "+nomAttribut+"="+valeur);
				}
				List<Element> methodes = eClasse.getChildren("methode");
				for(Element eMethode : methodes){
					String nomMethode = eMethode.getChildText("nom");
					String retour = eMethode.getChildText("retour");
					System.out.println("\t"+nomMethode+"():"+retour);
				}
			}
		}
		catch (JDOMException e) {
			e.printStackTrace();
		} 
		catch (IOException e) {
			e.printStackTrace();
		}
	}

}

Créer un fichier XML


Pour crééer un document XML, il suffit de créer les élements un par un en commencant par l'élément racine. Pour créer un élément, on utilise :
/* Création d'un élément */
Element element = new Element("nomBalise");
/* Affichage d'un texte entre les balises <element> et </element>*/
element.setText("Texte");
/* Affectation de l'élément à son père */
pere.addContent(element);


Une fois que la hiérarchie est créée, on enregistre le fichier de la manière suivante :
/* Création du document */
Document document = new Document(elementRacine);
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
try {
	sortie.output(document, new FileOutputStream("D:\\fichier.xml"));
} 
catch (FileNotFoundException e) {
	e.printStackTrace();
} 
catch (IOException e) {
	e.printStackTrace();
}


Par exemple, pour créer le début du fichier XML donné en exemple :
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;


public class CreationDocument {
	
	public static void main(String[] args){
		
		/* Création de tous les éléments */
		Element racine = new Element("diagramme");
		Element classe1 = new Element("classe");
		Element nom1 = new Element("nom");
		nom1.setText("Classe1");
		Element attribut1 = new Element("attribut");
		Element nomAttribut = new Element("nom");
		nomAttribut.setText("attribut1");
		Element type = new Element("type");
		type.setText("String");
		Element valeur = new Element("nom");
		valeur.setText("valeur1");
		
		/* Création de la hiérarchie */
		racine.addContent(classe1);
		classe1.addContent(nom1);
		classe1.addContent(attribut1);
		attribut1.addContent(nomAttribut);
		attribut1.addContent(type);
		attribut1.addContent(valeur);
		
		/* Enregistrment */
		Document document = new Document(racine);
		XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
		try {
			sortie.output(document, new FileOutputStream("D:\\diagramme2.xml"));
		} 
		catch (FileNotFoundException e) {
			e.printStackTrace();
		} 
		catch (IOException e) {
			e.printStackTrace();
		}
	}

}

Modifier un fichier XML


Le tableau suivant regroupe les méthodes principales qui permettent de modifier une arborescence.

MéthodeDescription
addContentAjoute le contenu à la fin d'un élément ou si on précise un index, à la position voulue
removeChildSupprime le premier fils ayant le nom passé en attribut
removeChildrenSupprime tous les fils ayant le nom passé en attribut
setTextDonne un nouveau nom à l'élément
Publié par cs_Julien39.
Ce document intitulé «  Gestion des fichiers XML avec JDOM  » issu de CodeS-SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Ajouter un commentaire

Commentaires

Donnez votre avis
Utilisation des JInternalFrame
Connecter une application Android à une base de données