IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

probleme de suppresion de noeud [JDOM]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club

    Inscrit en
    mai 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 26
    Points : 67
    Points
    67
    Par défaut probleme de suppresion de noeud
    Salut,

    Je travaille avec JDOM sur des fichier XMl representant des questions auxquelles, je pourrais ajouter ou supprimer des options de reponses. Voici un exemple du fichier XML:
    <?xml version="1.0" encoding="UTF-8"?>
    <Question>
    <text>Ceci est un exemple de question</text>
    <weigth>1</weigth>
    <type>2</type>
    <answerOption>
    <answer id="1" text="option1" rigth="1" />
    <answer id="2" text="option2" rigth="1" />
    <answer id="3" text="option3" rigth="0" />
    </answerOption>
    </Question>
    Je n'arrive pas a supprimer une option de reponse (l'element answer) specifique avec mon code. Ca supprime toujours la premiere option de reponse. Voici quelques fonction de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    private static void readQuestion(String questionFileName)
     {
       //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é
             questionDocument = sxb.build(new File(questionFileName));
          }
          catch(Exception sax){}
     
        questionRoot = questionDocument.getRootElement();
     
     }
     
     
     
    private static void saveQuestion(String fileName)
    {
       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(questionDocument, new FileOutputStream(fileName));
     
       }
       catch (java.io.IOException e){}
    }
     
     public static void removeAnswer(String questionFileName,int idAnswer)
      {
        String strIdAns=new Integer(idAnswer).toString();
     
        boolean find=false;
        Element currentAnswer=null;
     
        readQuestion(questionFileName);
     
         System.out.println("strIdAns = " + strIdAns);
     
         Element answerOption=questionRoot.getChild("answerOption");
     
         List listAnswer = answerOption.getChildren("answer");
     
        //On crée un Iterator sur notre liste
        Iterator answerIterator = listAnswer.iterator();
     
       while(answerIterator.hasNext() && find==false)
       {
         currentAnswer = (Element)answerIterator.next();
         String currentAnswerId=currentAnswer.getAttribute("id").getValue().trim();
     
         if(currentAnswerId.equals(strIdAns))
             {
     
               System.out.println("id = " + currentAnswerId);
               find=true;
             }
       }
     
       if(find==true)   answerOption.removeChild(currentAnswer.getName());
     
      }
    Et dans le main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static void main(String[] args)
    {
          removeAnswer("question1.xml",3);
          saveQuestion("Newquestion1.xml");
       }
    Merci pour toutes aides.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut
    J'ai testé un peu cette API et il y un truc qui me chiffonne.

    Si je veux effacer un element en utilisant un index, il saute de deux entre chaque élément.

    Donc si tu as 3 éléments, il compte 1,3,5 et non 1,2,3.

    Alors que quand j'affiche le size cela me compte bien 3 éléments.

    Il me faudrait des explication sue le sujet car là je coince.

    Sinon pour effacer un element précis j'ai une petite méthode ci-dessous.

    Mais en faisant attention que les éléments ne sont pas bien incrémentés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    private static void removeAnswer(String questionFileName, int idAnswer)
      {
    	  readQuestion(questionFileName);
    	  int i=0;
     
    	  Element answerOption=questionRoot.getChild("answerOption");
     
    	  List answers = answerOption.getChildren();
     
     
     
    	  for (Iterator answerIterator = answers.iterator();answerIterator.hasNext();i++)
    	  {
    		  Element e = (Element)answerIterator.next();
    		  String currentAnswerId=e.getAttribute("id").getValue().trim();
     
    	  		if (currentAnswerId.equals(new Integer(idAnswer).toString()))
    	  		{
    				answerOption.removeContent(i);
    				break;
    	  		}
    	  }
      }
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

  3. #3
    Membre du Club

    Inscrit en
    mai 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 26
    Points : 67
    Points
    67
    Par défaut
    Merci. Effectivement je m'en suis rendu compte. Pour tenter de savoir pouquoi j'ai utilise des fonctions comme cellle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     private static void getAnswer_content(String questionFileName) {
        readQuestion(questionFileName);
        int i = 0;
     
        Element answerOption = questionRoot.getChild("answerOption");
     
        List answers = answerOption.getChildren();
     
        for (Iterator answerIterator = answers.iterator(); answerIterator.hasNext();
             i++) {
          Element e = (Element) answerIterator.next();
          System.out.println("Content = " + answerOption.getContent(i).toString());
        }
     
        System.out.println("Nombre d'element = " + answerOption.getChildren().size());
     
      }
    Et le resultat est :

    Content = [Text:
    ]
    Content = [Element: <answer/>]
    Content = [Text:
    ]
    Nombre d'element = 3
    Et je me demande d'ou vient l'element Text en question?

  4. #4
    Membre du Club

    Inscrit en
    mai 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 26
    Points : 67
    Points
    67
    Par défaut
    Salut,
    Ca marche si au lieu d'utiliser le compteur, on recupere l'element en question et on le supprime.


    currentAnswer = (Element)answerIterator.next();
    ....
    listAnswer.remove(currentAnswer);
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme de lecture de noeud en c++
    Par Labotrain dans le forum XML
    Réponses: 0
    Dernier message: 27/03/2008, 12h05
  2. Réponses: 1
    Dernier message: 16/08/2007, 13h22
  3. C# et XML Probleme pour supprimer un noeud
    Par Zeuth dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/03/2007, 12h06
  4. Problème de suppresion de dossier
    Par HNT dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 17/11/2005, 19h20
  5. [DOM] Probleme d'ajout de noeud
    Par romain3395 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 30/11/2004, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo