Modifier "text" avec jdom

cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008 - 1 mars 2007 à 13:45
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 6 mars 2007 à 18:12
Salut à tous.

J'ai un fichier connexion.xml dont je souhaiterai lire ou modifier un text precis. Apres des recherches sur le net, j'ai cru comprendre que JDOM est le meilleur choix. Par contre, j'ai lu +ieurs fichiers d'aide (y compris sur ce site), mais j'y arrive pas car ça ne correspond jamais à de la modification de "text".
Voici mon fichier xml :

<connexion>
   <orphy>
      10.129.50.50
      21

   </orphy>
   <mysql>
      <host>meteo</host>
      meteo
   </mysql>
</connexion>

et ce que j'ai ecrit en java (fonctionne pas bien sûr) :

org.jdom.Document document = null;
                    Element racine;
                    Element element = null;
                    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("C:\\Program Files\\MeteoStat2007\\connexion.xml"));
                    }
                    catch(Exception jdm) {
                        jdm.printStackTrace();
                    }
                    racine = document.getRootElement();
                    List listchild = racine.getChildren();
                    Iterator i = listchild.iterator();
                   
                    if(jTFPort.getText()!=""){
                        while(element.getName() != "port"){
                            element = (Element)i.next();
                        }
                        try{
                            element.setAttribute("port", jTFPort.getText());
                        }
                        catch(Exception eport){
                           
                        }
                    }

Si vouss pouviez de donner un bout de code correct, une doc ou il y a ce qu'il faut, ou une correction de ce que j'ai mis, ça m'aiderait beaucoup.

Merci.

au bout du clavier...

14 réponses

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
2 mars 2007 à 15:47
Slt.
pour modifier une valeur, tu fais:
racine.getChild("Nom de la clef").setText("la nouvelle valeur");

+
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
2 mars 2007 à 15:48
et si tu veux obtenir la valeur que contient une clef tu fais a meme chose mais tu remplace setText(""); par getText();
0
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
4 mars 2007 à 09:49
Salut.

Merci pour ton aide. J'ai modifié mon code comme ceci :

Element racine = null;
Element element = null;
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("C:\\Program Files\\MeteoStat2007\\connexion.xml"));
}
catch(Exception jdm) {
      jdm.printStackTrace();
}
      racine = document.getRootElement();
      if(jTFPort.getText()!=""){
             try{
                     racine.getChild("port").setText(jTFPort.getText());
             }
             catch(Exception eport){
                           
             }
}

Il n'y a pas d'erreur, mais le fichier n'est pas modifié.
Il y aurait-il un probleme dans la façon dont j'ecrit le chemin du fichier?

au bout du clavier...
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
4 mars 2007 à 14:36
Slt.
Et une fois que tu as fait les modif que tu voulais, il me semble qu'il faut (re)enregistrer le fichier (je m'etait fait avoir).
Pour l'enregistrer, tu fais :
   try{
     XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
          sortie.output(document, new FileOutputStream("Le_Nom_De_Ton_Fichier.xml"));
    }catch (Exception ex){}

et là, normalelemnt ca devrait fonctionner correctement.

Pour un exemple complet :
   SAXBuilder sxb = new SAXBuilder();
    try{
     document = sxb.build(new File("Le_Nom_De_Ton_Fichier.xml"));
    }catch (Exception ex){}
    racine = document.getRootElement();
    
    racine.getChild("Le_Nom_De_La_Clef").setText("Nouvel_Valeur");
    
    try{
     XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
          sortie.output(document, new FileOutputStream("Le_Nom_De_Ton_Fichier..xml"));
    }catch (Exception ex){}

voila. +
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
5 mars 2007 à 14:34
Salut.

Désolé, mais ça ne donne rien en l'adaptant. J'ai un message d'erreur :
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at stat_meteo.meteorologie$1.actionPerformed(meteorologie.java:144)

Voila la ligne 144 :
racine.getChild("port").setText(jTFPort.getText());

Et voila comment j'ai adapté le code :

org.jdom.Document document = null;
                    Element racine = null;
                    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("c:/Program Files/MeteoStat2007/connexion.xml"));
                    }
                    catch(Exception jdm) {
                        jdm.printStackTrace();
                    }
                    racine = document.getRootElement();
                    if(jTFPort.getText()!=""){
                        racine.getChild("port").setText(jTFPort.getText());
                        System.out.println("valeur : "+jTFPort.getText());
                        try{
                            XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
                            sortie.output(document, new FileOutputStream("c:/Program Files/MeteoStat2007/connexion.xml"));
                        }
                        catch (Exception ex){
                            System.err.println(ex);
                        }
                    }

J'ai aussi regardé sur le net pour voir si je l'avais mal ecrit, mais je ne vois pas l'erreur.

au bout du clavier...
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
5 mars 2007 à 16:04
Slt.
conseil: n'utilise pas "==" et/ou "!=" pour comparer des String mais plutot la methode "String.equals(String)"
l'exception NullPointerException signifi que quelque part dans ton code tu veux attribuer une valeur à quelque chose mais que cette valeur est null.

effectu la modif et di moi si il y a tjrs l'erreur.
0
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
5 mars 2007 à 19:44
Salut.

J'ai suivi ton conseil, et il y a effectivement un pb. Voilà ce que j'ai fais :

org.jdom.Document document = null;
Element racine = null;
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("c:/Program Files/MeteoStat2007/connexion.xml"));
}
   catch(Exception jdm) {
   jdm.printStackTrace();
}
//JUSQUE LA, PAS DE CHANGEMENT
String verif = "";

String val_port;
racine = document.getRootElement();
System.out.println(jTFPort.getText());         //Pour vérifier le getText, on sais jamais
/*La j'ai modifié pour le test de chaine vide, l'execution se fait dans le "else"
je savais pas comment faire autrement. Et j'ai remplacé les "getText" par des String
afin de vérifier encore une fois que ça ne venait pas du getText, et tout est ok*/
if(jTFPort.getText().equals(verif)){
                       
}
else{
     val_port = jTFPort.getText();
     racine.getChild("port").setText(val_port);
     System.out.println("valeur : "+val_port);
     try{
           XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
           sortie.output(document, new FileOutputStream("c:/Program Files/MeteoStat2007/connexion.xml"));
     }
     catch (Exception ex){
            System.err.println(ex);
     }
}

Et donc toujours une erreur sur cette même ligne qui pourtant contient bien un String qui contient quelque chose.

au bout du clavier...
0
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
6 mars 2007 à 07:48
Salut.

Bon, ben c'est une erreur toute bête, j'ai oublié de remettre la ligne en question dans un try....
Il n'y a plus d'erreur, la "date de modification" du fichier change, mais pas son contenue.
Je continue de chercher.

au bout du clavier...
0
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
6 mars 2007 à 07:56
Ah si, Il y a tout de même le message d'erreur. Mais une partie du probleme est reglé.

au bout du clavier...
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
6 mars 2007 à 13:08
Quel est ton erreur ?
0
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
6 mars 2007 à 15:10
Je mets tout le message d'erreur :

java.lang.NullPointerException
    at stat_meteo.meteorologie$1.actionPerformed(meteorologie.java:152)
(La ligne 152 : racine.getChild("port").setText(val_port);)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

au bout du clavier...
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
6 mars 2007 à 16:24
slt.
c'est normale, tu n'initialise nul part ta variable "String val_port;".
au passage, tu peut remplacer "if(jTFPort.getText().equals(verif)){}" par "if(! jTFPort.getText().equals("")){/*tou le code que tu as mit dans le bloc else*/}" --> l'operateur "!" signifi egale a false. Donc si la saisie n'est pas vide alors ...

essaye avec ce que je t'ai mit et dis moi.
0
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
6 mars 2007 à 17:51
Salut.
Merci pour la variable, j'avais pas tilté. J'ai effectué les modifications, et il n'y a aucun changement. J'en arrive à me demander si c'est pas l'API qui pose problème...

au bout du clavier...
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
6 mars 2007 à 18:12
Slt.
Perso, j'utilise assez souven jdom et je n'est aucun pb.
En tous cas, si ca marche...
+
0
Rejoignez-nous