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
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