Problème algo récursif de parsage xml JAVA

Fermé
Virusatyr - 4 févr. 2010 à 22:36
 Virusatyr - 6 févr. 2010 à 15:19
Bonsoir,

Je souhaite parcourir le XML d'une arborescence de fichier de manière récursive (car un fichier peut en contenir un autre) et me créer une hasmap en java pour regrouper tout ca.

Le fichier XML est de ce type :

<dossier>
<nom>racine</nom>
<contenu>
     <fichier>test.txt</fichier>
     <dossier>
          <nom>doc_1</nom>
          <contenu>
                  <dossier>
                         <nom>sous doc 1</nom>
                         <contenu>
                                 <dossier>
                                       <nom>sous doc 1.1</nom>
                                        <contenu></contenu>
                                 </dossier>
                                 <fichier>1.1.txt</fichier>
                          </contenu>
                   </dossier>
             </contenu>
       </dossier>
       <dossier>
             <nom>doc_2</nom>
             <contenu></contenu>
        </dossier>
        <dossier>
              <nom>doc_3</nom>
               <contenu></contenu>
        </dossier>
</contenu>
</dossier>


Mon algo est fait en java avec la biblioteque nanoXML, il est le suivant :


public static String recurTest(IXMLElement element, HashMap<String, HashMap> map)
    {
        Enumeration child = element.enumerateChildren();
        String nomFic = "";

         while(child.hasMoreElements())
         {
                IXMLElement itemChild = (IXMLElement)(child.nextElement());

                if(itemChild.getName().equals("nom"))
                    nomFic = itemChild.getContent();
                else
                {
                     Enumeration contenu = itemChild.enumerateChildren();
                     HashMap<String, HashMap> map2 = new HashMap<String, HashMap>();

                     while(contenu.hasMoreElements())
                     {
                         IXMLElement itemContenu = (IXMLElement)(contenu.nextElement());

                         if(itemContenu.getName().equals("fichier"))
                             map.put(itemContenu.getContent(), null);
                         else
                             map.put(recurTest(itemContenu, map2), map2);

                     }
                }
         }

        return nomFic; 
}



L'algo marche bien pour certains XML (dossiers imbriqués mais avec un seul dossier à l'intérieur) mais pour celui donné en exemple ça dérape... J'obtiens une hashmap de ce type :

{3={1.1={1.1.1={}, 1.1.txt=null}}, 2={1.1={1.1.1={}, 1.1.txt=null}}, 1={1.1={1.1.1={}, 1.1.txt=null}}, test.txt=null}


En espérant que vous trouviez où mon algo déconne...
Merci d'avance

Bastien.
A voir également:

1 réponse

Personne n'a d'idées ?
0