Pb avec les lignes d'un code

Résolu
kaninama Messages postés 56 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 28 mai 2006 - 23 mai 2006 à 14:55
kaninama Messages postés 56 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 28 mai 2006 - 24 mai 2006 à 16:07
Je parsse un document XML avec JDOM, je récupère les élément un par un avec une récursive je calcule leur nombre et en même temps je dois traiter le texte contenu dans chaque nœuds j’ais réalisé cela mais dé que j’ajoute les ligne de code pour le traitement du texte de l’élément le calcule du nombre d’élément est faux, et mon programme n’accède plus au élément du deuxième niveau du document , j’espère que vous comprenez a peu prés mon pb je vous donne une partie de mon code et les lignes qui me cause ce pb sont ont commentaire et on rouge
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

//....
.........
public void traitement(Element e)
{
//........on liste les fils de l'element donner.............//
List listelement2=e.getChildren();
nombre_element=nombre_element+listelement2.size();//pour le calcule du nombre d'element le niveau2
//........si il n'a d'element fils on le traite............//
if( listelement2.size()==0)
{ e.getText();
//....je calcule le poids de chaque terme dans l'element .....//
contenu=e.getText();
StringTokenizer st = new StringTokenizer(contenu);
/* while(st.hasMoreTokens()) {
String motentré=st.nextToken();
if (motentré.length() > 7)
motentré = motentré.substring(0, 7);//c'est un simple traitement du mot

if(al.contains(motentré))
poid[al.indexOf(motentré)]++;
else {
al.add(motentré);
poid[al.indexOf(motentré)] = 1;
}

}*/


//....fin de calcule du poids des termes d'un element.....//
}

//........et pour chaque objet de la liste ..............//
for(int cpt=0;cpt<listelement2.size();cpt++)
{
//...on verifie si les elements de la liste on des sous elments....//
Element courant=(Element)listelement2.get(cpt);
// System.out.println(courant.getName());
// System.out.println(courant.getText());
if(courant.getChildren()==null)
courant.getText(); //il faut mettre la methode de calcule du poids
//.....et si il a des elements fils on applique de nouveau la fonction ....
else
{
traitement(courant);

}//fin de else

}//fin de for
}

......// La suite du code

<!-- END TEMPLATE: bbcode_code -->
Si quelqu’un a n’importe qu’elle idée sur la solution qu’il n’hésite surtout pas a me la faire partager

Merci a vous tous
Remarque
Les ligne qui me cause pb marche très bien quant il sont seul c'est-à-dire j’ai fait rentré un simple texte et j’ai tester le fonctionnement de ces lignes ça marche très bien

<!-- / message -->

9 réponses

kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
24 mai 2006 à 11:56
salut,

je n'ai pas d'explication as te donner.

ce que tu vas faire :  tu vas transformer les variables motentré, al, poid en variable locales. si le bug demeure cela veut dire que il y a une relation que tu ne connais pas.
avec la commande recherche de ton IDE, je te conseille de faire une recherche sitématique sur toutes les classes avec les mots motentré, al et poid .
3
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
24 mai 2006 à 13:00
dans ta nouvelle méthode, tu vas faire une déclaration de nouvelles variables qui vont prendre place de
tes variables anciennes variables motentré, al et poid. si le bug disparait (tout à l'heure je me suis trompé dans mon raisonnement) cela veut dire que les variables
motentré, al et poid ont un lien avec le nombre d'élèment.
3
kaninama Messages postés 56 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 28 mai 2006
23 mai 2006 à 15:23
je ne sais ce qui est arrivé a mon poste mais je vous repose mon pb 

 Je parsse un document XML avec JDOM, je récupère les élément un par un
avec une methode récursive je calcule leur nombre et en même temps je dois traiter
 le texte contenu dans chaque nœuds j’ais réalisé cela mais dé que j’ajoute les ligne
 de code pour le traitement du texte de l’élément le calcule du nombre d’élément est faux,
et mon programme n’accède plus au élément du deuxième niveau du document ,
 j’espère que vous comprenez a peu prés mon pb
je vous donne une partie de mon code
les lignes qui me cause ce pb sont ont commentaire et on rouge

<!-- BEGIN TEMPLATE: bbcode_code -->public void button1_actionPerformed(ActionEvent e) {


        this.getContentPane().repaint();


        JFileChooser chooser = new JFileChooser(".");


                chooser.setDialogType(JFileChooser.OPEN_DIALOG); // FileChooser personnalisé
                chooser.setAcceptAllFileFilterUsed(false); // ne pas offrir l'option "tous les fichiers"
                chooser.setDialogTitle("Selection d'un document XML ");


                FileFilter f = new FiltreFichierXml();
                chooser.addChoosableFileFilter(f); // on ajoute le filtre
                chooser.showOpenDialog(null);
                document_choisi = chooser.getSelectedFile();//le fichier selectionner
                label1.setText(document_choisi.getName());
    }


    public void button2_actionPerformed(ActionEvent e) {
        SAXBuilder builder = new SAXBuilder();
                                try {


                                     //OutputStream sortie=new FilterOutputStream(sortie);


                                      Document document=  builder.build(document_choisi);//parser le document choisi
                                      Element racine = document.getRootElement();// recuperer l'element racine




                                 System.out.println(racine.getChildren());// un simple teste
                                 System.out.println(racine.getName());// sa ne marche pas
                                 //XMLOutputter x =new XMLOutputter() ;//il est utiliser pour l'affichage du tableau
                                 // x.outputElementContent(element,f);//pour afficher le contenu d'un element


                      //.......pour le traitement du contenu de la racine.............//
                          System.out.println(racine.getText());// elle ne marche pas
                          List descendants_document = racine.getChildren();
                          nombre_element=descendants_document.size();//...pour le calcule du nombre d'elment c'est le 1er niveau
                          Iterator i=descendants_document.iterator();
    //....un while pour avoir les autres element du document.........//
                                     while(i.hasNext())
                                     {
                                        Element courant =(Element)i.next();
                                        System.out.println(courant.getText()); //pour le traitement du texte de l'element courant   
                                       if (courant.getChildren()!=null)
                                       {  
                                           traitement(courant); //fin de if
                                          
                                       }
                                   //si l'élément n'a pas de fils on le traite on son fou
                                     
                                     }//.....fin de while......


                                } catch (Exception exception) {


                        }
        //.......le calcule du nombre d'element dans le document ......//
              String Nelement=new String();
              textField1.setText( Nelement.valueOf(nombre_element));// le calcule est juste
    }     //..........fin du calcule ........//
    //.....la methode recursive pour recupéré et traiter tt les elements du document et pour les traiter tous......//
    public void traitement(Element e)
    {
        //........on liste les fils de l'element donner.............//
                  List listelement2=e.getChildren();
       nombre_element=nombre_element+listelement2.size();//pour le calcule du nombre d'element le niveau2
        //........si il n'a d'element fils on le traite............//
        if( listelement2.size()==0)
        { e.getText();
     //....je calcule le poids de chaque terme dans l'element .....//
         contenu=e.getText();
         StringTokenizer st = new StringTokenizer(contenu);
       /*  while(st.hasMoreTokens()) {
                   String motentré=st.nextToken();
                        if (motentré.length() > 7)
                       motentré = motentré.substring(0, 7);//c'est un simple traitement du mot



                       if(al.contains(motentré))
                             poid[al.indexOf(motentré)]++;
                       else {
                             al.add(motentré);
                       poid[al.indexOf(motentré)] = 1;
                   }



               }*/




    //....fin de calcule du poids des termes d'un element.....//
         }




        //........et pour chaque objet de la liste ..............//
        for(int cpt=0;cpt<listelement2.size();cpt++)
        {
        //...on verifie si les elements de la liste on des sous elments....//
          Element courant=(Element)listelement2.get(cpt);
         // System.out.println(courant.getName());
       //   System.out.println(courant.getText());
          if(courant.getChildren()==null)
        courant.getText();      //il faut mettre la methode de calcule du poids
          //.....et si il a des elements fils on applique de nouveau la fonction ....
          else
          {
              traitement(courant);


          }//fin de else


        }//fin de for
    }


}


Si quelqu’un a n’importe qu’elle idée sur la solution qu’il n’hésite surtout
pas a me la faire partager

Merci a vous tous

Remarque
Les ligne qui me cause pb marche très bien quant il sont seul c'est-à-dire j’ai fait
rentré un simple texte et j’ai tester le fonctionnement de ces lignes ça marche très bien<!-- / message -->
0
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
23 mai 2006 à 15:49
dans ton texte, as tu des retour à la ligne?
0

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

Posez votre question
kaninama Messages postés 56 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 28 mai 2006
23 mai 2006 à 16:04
coucou,

oui j'ai des retour a la ligne mais je ne vois pas vraiment ou est le pb avec ça
tu peut m'expliquer stp??

merci
0
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
23 mai 2006 à 18:40
c'était une idée comme ça. parce que un stringtokenizer par défaut ne détecte que des espaces alors que un saut de ligne n'en est pas.
donc il peut considérer que le dernier mot de la ligne et le premier mot de la ligne suivante n'en font qu'un.

question : quel est le rapport entre tes lignes en rouge et le nombre d'élèment?
0
kaninama Messages postés 56 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 28 mai 2006
24 mai 2006 à 10:08
Bonjour,

justement il y on a aucun et c'est ça qui est bizarre car dé que j'enlève ces ligne
tt redevient comme avant et si je les ajoute la je pense qu'on accède plus a la suite du code
donc si qlq 1 peux m'aider car la je ne trouve pas de solution car je ne peu même pas trouvé ou est
le conflit

merci a vous tous
0
kaninama Messages postés 56 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 28 mai 2006
24 mai 2006 à 12:04
Bonjour tt le monde,
 merci  kaloway,
mais j'ai pas vraiment compris ce que tu ma dis(je suis débutante en java ),
si tu peux m'expliqué encore plus stp,
 
j'ai encore amélioré ce code j'ai transformé ces ligne on méthode et dé que
je fais l'appelle de cette c'est le mme pb qui apparaît

merci
0
kaninama Messages postés 56 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 28 mai 2006
24 mai 2006 à 16:07
merci kaloway,
tu avais raison le pb est régler partialement(car il y a d'autre bug qui ont apparu)
mais ce n'est pas grave c'est sur quil vont etre regler tres rapidement
je te remercie beaucoup
@ bientot
0
Rejoignez-nous