Mise à jour d'un fichier XML

mimomama Messages postés 38 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 16 avril 2009 - 3 avril 2008 à 10:13
mohamedbl Messages postés 1 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 22 février 2012 - 22 févr. 2012 à 16:34
Salut tout le monde.
J'ai besoin d'aide s'il vous plaît mon travail est arrêté.
Voilà mon fichier xml:
<qcm>
    <questions>
        </question num=1>
               </libellé>
               </reponse rnum 1>
               </reponse rnum=2>
        </question num=2>
                </libellé>
                </reponse rnum=1>
                </reponse rnum=2>
    </questions>
</qcm>
Cette structure vide se créé dés le début de l'application car l'application demande de l'utilisateur de donner le nombre de questions ainsi que les réponses.
Mais lorsque l'utilisateur saisie les questions je veux modifier ce fichier XML.
J'ai trouvé une solution dans ce forum mais lorsque je l'a mis toujours il y a ecrasement des question çad toujours les balises de la premiére questions se mettre à jours mais moi je veux passer aux balises de la deuxime questions.
Autre petit probléme dans la même question je veux passer d'une réponse à une autre mais toujouirs il y a remplacement de la premiére balise.

Merci pour votre aides.

<!-- / message -->

3 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
3 avril 2008 à 11:01
Salut:

Tu n'es pas obligé de créer un fichier XML initial avec une structure vide.

Pourquoi compliquer les choses, tant qu'on peut faire mieux.

Tu n'as qu'à préserver les données (nombre de questions et de réponses) saisies au démarrage de l'application, puis petit à petit tu construit ton arbre XML (appendChild(), ...) au fûr et à mesure de la collecte des données (questions & réponses).

N'est ce pas?
0
mimomama Messages postés 38 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 16 avril 2009
4 avril 2008 à 00:08
Ok j'ai essayé mais le probléme reste dans la récupération des réponses toujours écrasement de la réponse précédante ,voici mon code de modification si vous voulez m'aidez. Excusez moi je me suis débutant. Merci beaucoup.

package enit.lesclass;
import java.io.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import java.util.List;
import java.util.Iterator;
import org.jdom.Document;
import org.jdom.Element.*;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.Attribute;
import org.jdom.Content;
import java.lang.Integer;
import java.lang.String;
import enit.lesclass.nom;


public class modif {
  private String fichierXml="C:/Program Files/glassfish-v2-b58g/domains/domain1/config/qcm.xml"; 
  //private Element racine ;
  static Element racine = new Element("questions");
  private Document document;
nom p=new nom();
public boolean Ajout(nom p){
     try{
     lireFichier(fichierXml);
     if(!questionExist()){
      ajouter(p);
     }else{
        modifier(p);
     }
     enregistreFichier(fichierXml);
      return true;
     }catch(Exception e){}
     return false;
     }
public void lireFichier(String fichier) throws Exception
{
SAXBuilder sxb = new SAXBuilder();
document= sxb.build(new File(fichier));
racine = document.getRootElement();
}
public void enregistreFichier(String fichier) throws Exception
{
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
sortie.output(document, new FileOutputStream(fichier));
}
public void ajouter(nom p){
  Element question = new Element("question");
  racine.addContent(question);
  Attribute num = new Attribute("num"," ");
  question.setAttribute(num);
  Element libelle = new Element("libelle");
  question.addContent(libelle);
  libelle.setText(p.getlibelle());
                   
  Element reponse = new Element("reponse");
  question.addContent(reponse);
 reponse.setText(p.getreponse());                          
  Attribute rep = new Attribute("rep","");
  reponse.setAttribute(rep);
 Attribute rnum = new Attribute("rnum"," ");
 reponse.setAttribute(rnum);                                                          
}
public boolean questionExist(){
    List listquestions = racine.getChildren("question");
    if(listquestions.isEmpty())
      return false;
    //On crée un Iterator sur notre liste
    Iterator i = listquestions.iterator();
    while(i.hasNext())
    {
    
    Element courant = (Element)i.next();
   //On affiche le nom de l'element courant
    //Je n'ai pas un moyen de comparaison car j'ai pas de balise
    //numero de quesrtion mais j'ai un attribut qui indique le numero de la question
     if(courant.getAttribute("num").getTextTrim().equals(num));


      return true;
    }
      return false;
}
//////////////////////////////: cette methode permet de faire la mise à jour du question dans le cas ou il existe deja/////////////////////
public void modifier(nom p){
     List listquestions = racine.getChildren("question");
    //On crée un Iterator sur notre liste
    Iterator i = listquestions.iterator();
    while(i.hasNext())
    {
           Element courant = (Element)i.next();
          courant.getChild("libelle").setText(p.getlibelle());
          courant.getChild("reponse").setText(p.getreponse());
          return;
      }
}
}

La classe java nom contient les getters et les setters.
Merci.<!-- / message -->
0
mohamedbl Messages postés 1 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 22 février 2012
22 févr. 2012 à 16:34
0
Rejoignez-nous