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 :

Transformer un doc XML en tableau


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut Transformer un doc XML en tableau
    Salut à tous,
    j'ai besoin de votre aide dans le petit problème suivant:
    je suis entrain d'écrire une fonction qui permet de transformer un documents XML en un tableau à deux dimensions où le premier colonne contient tous les éléments du document et le deuxième colonne contient le niveau d'imbrication de chaque élément.

    la fonction est la suivante :
    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
     
    public static String [][] strutable(Element element, String tab [][],int i ,int niv )
    {
    	tab[i][0]=element.getName();
    	tab[i][1]=String.valueOf(niv);
    	i++;
    	if(element.getChildren().isEmpty()==false)
               {
    	      List liste=element.getChildren();
    	      Iterator it=liste.iterator();
     
    	      while(it.hasNext())
    		 {
    		     Element fils=(Element)it.next();
    		     strutable(fils, tab, i, niv+1);
    		 }
     
    	    }
     
    	return tab;
     
    }
    puis pour utiliser le tableau retourner par cette fonction pour un autre traitement, j'ai met cette fonction dans un autre tableau comme suit : dans le main j'ai écrit le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        String tableau [][]=new String [13][2];
        String tab [][]=new String [13][2];
    	     tableau= strutable(racine,tab,0,0);
     
                for( int i=0;i<13;i++)
    		{
    		  for( int j=0;j<2;j++)
    		    {
    			System.out.print(tableau[i][j]+ "\t");
    		    }
    			System.out.println();
    		}
    Mais quand je veux afficher le contenu de "tableau", il n'affiche pas tous les éléments, ils affiche quelques cases vides ou null. Donc aidez-moi svp et je pense que le problème il est dans l'appel de la fonction ?!!

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Tu as oublié qu'un sous-appel de strutable() va augmenter la valeur du i qu'il a reçu, mais sans augmenter la valeur de i connue par celui qui l'a appelé.

    Autrement dit, tu passes ton temps à réécrire des éléments au même endroit.

    Il faut que strutable() se passe un unique objet chargé de maintenir un compteur qui indique le prochain index où enregistrer.
    Le plus simple, même si c'est dévoyé de son but premier, est d'utiliser un AtomicInteger. C'est un objet qui contient un int et auquel on peut demander d'incrémeter ce int ou d'en avoir la valeur en cours.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    salut à tous,
    merci monsieur thelvin pour ta réponse.
    j’essayerai d'utiliser AtomicInteger et je vous dire si elle marche ou pas. merci.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    évidemment, tout cela serait bien plus simple en utilisant quelque chose comme une List<NameAndDepth>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    salut à tous,
    j'ai pas réussi à trouver la solution à l'aide de AtomicInteger, peut être j'ai mal utilisé "AtomicInteger" voici le code utilisé:
    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
     
    static String [][] table(Element element, String tab [][], int i ,int niv)
     {
    	AtomicInteger compte =  new AtomicInteger(i) ; 
    	  tab[i][0]=element.getName();
    	  tab[i][1]=String.valueOf(niv);
     
    	  i= compte.incrementAndGet();
     
    	  if(element.getChildren().isEmpty()==false){
    	 	List liste=element.getChildren();
    	 	Iterator it=liste.iterator();
     
    	 	while(it.hasNext())
    	 	  {
    	 	       Element fils=(Element)it.next();
    	 	       table(fils, tab, i, niv+1);
    	          }
     
    	 }
     
    	return tab;
    }
    Aidez-moi svp
    Reppel: le premier code que j'ai écrit sans "AtomicInteger" il marche avec un tableau de 1 dimension mais dans mon cas 2 dimensions il marche pas.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par loudji Voir le message
    j'ai pas réussi à trouver la solution à l'aide de AtomicInteger, peut être j'ai mal utilisé "AtomicInteger" voici le code utilisé:
    Euh.

    Peux-tu me rappeler pourquoi j'ai parlé de AtomicInteger, déjà ?
    Il me semble que c'était une histoire de paramètre int qui n'est pas partagée par la méthode appelante et la méthode appelée : quand l'appelée modifie le int, l'appelante ne le voit pas.
    Ce qui peut être facilement réglé en remplaçant le int par un objet chargé de compter, ce qu'on peut faire par exemple avec un AtomicInteger.

    Je ne vois pas d'AtomicInteger dans les paramètres de ta méthode. Je ne vois donc pas comment l'appelante va pouvoir le passer à l'appelée.
    Par contre je vois toujours le int i, celui qu'on aurait dû remplacer par AtomicInteger.

    Citation Envoyé par loudji Voir le message
    Reppel: le premier code que j'ai écrit sans "AtomicInteger" il marche avec un tableau de 1 dimension mais dans mon cas 2 dimensions il marche pas.
    Non. Le premier code avec ou sans AtomicInteger, ne marchait pas ni avec une dimension ni deux ni aucune. Le problème est exactement le même, et donc ton changement de dimension n'a rien à voir avec le problème.

    Ou alors tes histoires de dimensions ne sont pas claires et je demande une preuve.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    Non je veux dire avec un ArrayList il marche

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

Discussions similaires

  1. [XML] Transformer un fichier .XML en Tableau
    Par metatron dans le forum Bibliothèques et frameworks
    Réponses: 16
    Dernier message: 13/10/2012, 16h49
  2. [XML] XmlTextReader & tableau dynamique
    Par j0hnmerrick dans le forum ASP.NET
    Réponses: 7
    Dernier message: 15/04/2004, 11h47
  3. Réponses: 3
    Dernier message: 27/01/2004, 16h15
  4. [xsl java]Appliquer une XSL à un String contenant doc XML
    Par aldo047 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 03/04/2003, 15h46
  5. transformer un fichire Xml en pdf
    Par SuperFoustan dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/02/2003, 11h45

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