Jdom

Fermé
gilles81 Messages postés 67 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 29 juillet 2009 - 18 juil. 2009 à 09:26
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 19 juil. 2009 à 19:11
Bonjour,
je n'arrive pas à exécuter l'exemple du tutoriel xml de developpez.com . en fait il y a une classe JDOM1 qui cré le fichier xml:

import java.io.*;
import org.jdom.*;
import org.jdom.output.*;

public class JDOM1
{
//Nous allons commencer notre arborescence en créant la racine XML
//qui sera ici "personnes".
static Element racine = new Element("personnes");

//On crée un nouveau Document JDOM basé sur la racine que l'on vient de créer
static org.jdom.Document document = new Document(racine);

public static void main(String[] args)
{
//On crée un nouvel Element etudiant et on l'ajoute
//en temps qu'Element de racine
Element etudiant = new Element("etudiant");
racine.addContent(etudiant);

//On crée un nouvel Attribut classe et on l'ajoute à etudiant
//grâce à la méthode setAttribute
Attribute classe = new Attribute("classe","P2");
etudiant.setAttribute(classe);

//On crée un nouvel Element nom, on lui assigne du texte
//et on l'ajoute en temps qu'Element de etudiant
Element nom = new Element("nom");
nom.setText("CynO");
etudiant.addContent(nom);
Element prenoms = new Element("prenoms");
etudiant.addContent(prenoms);
Element prenom1 = new Element("prenom");
prenom1.setText("Nicolas");
prenoms.addContent(prenom1);
Element prenom2= new Element("prenom");
prenom2.setText("Laurent");
prenoms.addContent(prenom2);
Element Etudiant2 = new Element("etudiant");
Attribute classe2 = new Attribute("classe", "P1");
Etudiant2.setAttribute(classe2);
racine.addContent(Etudiant2);
Element nom2 = new Element("nom");
nom2.setText("Superwoman");
Etudiant2.addContent(nom2);
Element Etudiant3 = new Element("etudiant");
Attribute classe3 = new Attribute("classe", "P1");
Etudiant3.setAttribute(classe3);
racine.addContent(Etudiant3);
Element nom3 = new Element("nom");
nom3.setText("Don Corleone");
Etudiant3.addContent(nom3);



affiche();
enregistre("myFirst xml");



}
static void affiche()
{
try
{
//On utilise ici un affichage classique avec getPrettyFormat()
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
sortie.output(document, System.out);
}
catch (java.io.IOException e){}
}

static void enregistre(String fichier)
{
try
{
//On utilise ici un affichage classique avec getPrettyFormat()
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
//Remarquez qu'il suffit simplement de créer une instance de FileOutputStream
//avec en argument le nom du fichier pour effectuer la sérialisation.
sortie.output(document, new FileOutputStream(fichier));
}
catch (java.io.IOException e){}
}
}

et maintenant il faut afficher le nom de tous les elèves:

import java.io.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.filter.*;
import java.util.List;
import java.util.Iterator;
public class JDOM2
{
static org.jdom.Document document;
static Element racine ;
public static void main(String[] args)
{
//On crée une instance de SAXBuilder

SAXBuilder sxb = new SAXBuilder();

try
{
//On crée un nouveau document JDOM avec en argument le fichier XML
//Le parsing est terminé ;)

document = sxb.build(new File("personnes.xml"));

}
catch(Exception e){System.out.println( e );}
racine = document.getRootElement();

//Méthode définie dans la partie 3.2. de cet article
afficheALL();

}

static void afficheALL()
{

//On crée une List contenant tous les noeuds "etudiant" de l'Element racine
List listEtudiants = racine.getChildren("etudiant");
//On crée un Iterator sur notre liste
Iterator i = listEtudiants.iterator();
while(i.hasNext())
{
//On recrée l'Element courant à chaque tour de boucle afin de
//pouvoir utiliser les méthodes propres aux Element comme :
//selectionner un noeud fils, modifier du texte, etc...
Element courant = (Element)i.next();
//On affiche le nom de l'element courant
System.out.println(courant.getChild("nom").getText());
}
}

}

quand j'exécute la seconde classe j'ai une erreur:

java.io.FileNotFoundException: C:\Users\user\workspace\Jdom1\personnes.xml (Das System kann die angegebene Datei nicht finden)
Exception in thread "main" java.lang.NullPointerException
at JDOM2.main(JDOM2.java:26)

Quelqu'un peut il m'aider svp. ça m'empêche de continuer le tutoriel

merci

1 réponse

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
19 juil. 2009 à 19:11
Bonjour,
Cette erreur arrive car :
- tu crées, grâce à ta classe 1, un fichier que tu appelles "myFirst xml"
- tu essaies d'ouvrir un fichier "personnes.xml" grâce à ta classe 2

Comme ce fichier n'existe pas, ton fichier te lance une exception de type FileNotFoundException (qui veut littéralement dire "JeNeTrouvePasLeFichier").
Peux-être en renommant le fichier que tu crées dans ta classe1 en personnes.xml ?

Cordialement,
0