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 :

Parser un fichier XML et exraire des données dans un matrice ou liste en JAVA


Sujet :

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

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut Parser un fichier XML et exraire des données dans un matrice ou liste en JAVA
    Bonjour

    Je suis entrain de travailler sur un projet qui consiste à importer un fichier xml dans un prog java. J'ai créé déjà des classe qui permet jusqu'à maintenant de parser le fichier xml et afficher les données dans la console. Maintenant je veux extraire ces données et le stocker sous forme d'un tableau ou matrice ou liste.

    Voilà le code que j'ai écrit :
    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
    package com.beingjavaguys.core;
    import java.io.File;
    import java.io.IOException;
     
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
     
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    public class SAX_Graphe {
     
    	public static void main(String[] args){
     
     
    		AnalyseSAX a = new AnalyseSAX() ;
    		a.affichage_tab() ;
     
     
    		try{
    			// création d'une fabrique de parseurs SAX
    			SAXParserFactory fabrique = SAXParserFactory.newInstance();
     
    			// création d'un parseur SAX
    			SAXParser parseur = fabrique.newSAXParser();
     
    			// lecture d'un fichier XML avec un DefaultHandler
                            File fichier = new File("C:/Users/Cheibani/Desktop/xmlfile.xml");
    			DefaultHandler gestionnaire = new AnalyseSAX();
    			parseur.parse(fichier, gestionnaire);
     
                            }
     
    		catch(ParserConfigurationException pce){
    			System.out.println("Erreur de configuration du parseur");
    			System.out.println("Lors de l'appel à newSAXParser()");
    		}catch(SAXException se){
    			System.out.println("Erreur de parsing");
    			System.out.println("Lors de l'appel à parse()");
    		}catch(IOException ioe){
    			System.out.println("Erreur d'entrée/sortie");
    			System.out.println("Lors de l'appel à parse()");
    		}
     
     
     
    	}
    }
    Et voilà la deuxième classe :
    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
    package com.beingjavaguys.core;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    public class AnalyseSAX extends DefaultHandler { 
    //declaration d'un matrice et les compteurs 
        //tableau pour recuperer les donnees extraitent du fichier 
        public List<List<String>> elementsAttributes = new ArrayList<List<String>>(); 
     
        public void startElement(String namespaceURI, String sName, String qName, Attributes attrs) throws SAXException { 
            String eName = sName; 
            if ("".equals(eName)) { 
                eName = qName; 
            } 
            System.out.println("balise ouverte:" + eName); 
     
    // recuperation de L'element trouvee dans le tableau --->ligne x colonne 0 
            List<String> ligne = new ArrayList<String>(); 
            ligne.add(eName); 
     
            if (attrs != null) { 
                //Listage des attributs 
                if (attrs.getLength() != 0) { 
                    System.out.println("Listage des parametres pour la balise " + eName + ":"); 
                } 
                for (int i = 0; i < attrs.getLength(); i++) { 
                    String aName = attrs.getLocalName(i);//recuperation du nom de l'attribut 
                    if ("".equals(aName)) { 
                        aName = attrs.getQName(i); 
                    } 
                    System.out.println(" " + aName + "=" + attrs.getValue(i) +"" ) ; 
     
    //recuperation des valeurs des attributs dans les colonnes de tableau ---> par exemple ligne 1 colonne y             
                    ligne.add(attrs.getValue(i)); 
                } 
            } 
            elementsAttributes.add(ligne); 
        } 
     
        public void affichage_tab() { 
            System.out.println(""); 
            System.out.println("le tableau est : "); 
     
            for (List<String> line : elementsAttributes) { 
                for (String column : line) { 
                    System.out.print(column+"  "); 
                } 
                System.out.println("kkkkk"); 
            } 
        } 
    }
    Merci en avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Quelle est la question ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    Merci
    la question : comment je peux extraire les données de ficher xml et l'enregister dans un tableau ou autre type java ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    A regarder rapidement ton code, c'est ce qu'il fait, il me semble : on récupère, dans elementsAttributes, une liste (ArrayList) de listes, contenant, le nom d'un élément suivi des valeurs de ses attributs. Si tu as réussi à en arriver là, tu dois pouvoir, à priori, faire évoluer ton code pour ajuster cette liste selon tes besoins. Qu'est-ce qu'il te manque en particulier ? Y'a-t-il une erreur quelque part lors de l'exécution ? Si c'est le cas, laquelle ?

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    Bon, l'execution marche sans erreur mais la fonction affiche_tab() n'affiche rien toujours !!!!

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    La méthode affichage_tab() n'est appelée qu'à un seul endroit : juste après avoir créé une instance de AnalyseSAX, qui n'est même pas celle qui est utilisée pour parser le fichier. C'est le parsing qui remplit la liste : donc c'est normal que ça n'affiche rien. Appelles affichage_tab() après avoir parsé le fichier, sur l'instance de AnalyseSAX qui a été utilisée pour parser.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    Merci Bien , oui ça mache voilà le ficher xml que je parse voilà le resultat :


    le tablefau est :
    balise ouverte:graph
    Listage des parametres pour la balise graph:
    id=G
    edgedefault=undirected
    balise ouverte:node
    Listage des parametres pour la balise node:
    id=n0
    balise ouverte:data
    Listage des parametres pour la balise data:
    key=d0


    [...]
    n2
    data
    d1
    edge
    e4
    n2
    n4
    data
    d1
    edge
    e5
    n3
    n5
    data
    d1
    edge
    e6
    n5
    n4
    data
    d1
    --------
    juste une aure question ,
    dans le parsing pourquoi il m'affiche pas toujours les couleurs qui sont definit dans le fichier xml ?
    //

    Code xml : 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
    <graph id="G" edgedefault="undirected">
        <node id="n0">
          <data key="d0">green</data>
        </node>
        <node id="n1">
        <data key="d0">green</data>
        </node>
        <node id="n2">
          <data key="d0">blue</data>
        </node>
        <node id="n3">
          <data key="d0">red</data>
        </node>
        <node id="n4">
        <data key="d0">green</data>
        </node>    
        <node id="n5">
        <data key="d0">turquoise</data>
        </node>
        <edge id="e0" source="n0" target="n2">
        <data key="d1">1.0</data>
        </edge>
        <edge id="e1" source="n0" target="n1">
        <data key="d1">2.0</data>
        </edge>
        <edge id="e2" source="n1" target="n3">
        <data key="d1">3.0</data>
        </edge>
        <edge id="e3" source="n3" target="n2">
        <data key="d1">4.0</data>
        </edge>
        <edge id="e4" source="n2" target="n4">
        <data key="d1">5.0</data>
        </edge>    
        <edge id="e5" source="n3" target="n5">
        <data key="d1">5.0</data>
        </edge>
        <edge id="e6" source="n5" target="n4">
        <data key="d1">6.0</data>
        </edge>
      </graph>

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Parce que ton code récupère les noms d'éléments et les valeurs d'attributs uniquement. Or la couleur est dans le contenu d'un élément. Pour récupérer les textes de contenu d'éléments, il faut utiliser la méthode characters(char[], int, int) de DefaultHandler.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    Comment je vais l'utiliser ? elle prend quoi comme paramaitres ?

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Si tu reprends l'exemple initial dont tu t'es visiblement inspiré, tu verras un exemple d'implémentation de cette méthode.

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    Merci bien

    je te contacte si je trouve le m prob

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    je pense que Dom et plus adapté à mon type de fichier (GraphMl)

    et voilà le code pour le parsing :

    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
    67
    68
    69
    70
    71
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.DocumentBuilder;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Node;
    import org.w3c.dom.Element;
    import java.io.File;
     
    public class ReadXMLFile1 {
     
      public static void main(String argv[]) {
     
        try {
     
    	File fXmlFile = new File("C:/Users/Cheibani/Desktop/xmlfile.xml");
    	DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    	DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    	Document doc = dBuilder.parse(fXmlFile);
     
    	//optional, but recommended
    	doc.getDocumentElement().normalize();
     
    	System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
     
    	NodeList nList = doc.getElementsByTagName("node");
    	NodeList nList2 = doc.getElementsByTagName("edge");
     
    	System.out.println("----------------------------");
     
    	for (int temp = 0; temp < nList.getLength(); temp++) {
     
    		Node nNode = nList.item(temp);
     
    		System.out.println("\n L'element courant :" + nNode.getNodeName());
     
    		if (nNode.getNodeType() == Node.ELEMENT_NODE) {
     
    			Element eElement = (Element) nNode;
     
    			System.out.println(" id : " + eElement.getAttribute("id"));
    			//System.out.println("First Name : " + eElement.getElementsByTagName("node").item(0).getTextContent());
    			System.out.println("couleur : " + eElement.getElementsByTagName("data").item(0).getTextContent());
    			//System.out.println("Nick Name : " + eElement.getElementsByTagName("edge").item(0).getTextContent());
    			//System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
     
    		}
    	}
     
     
    	for (int temp = 0; temp < nList2.getLength(); temp++) {
     
    		Node nNode2 = nList2.item(temp);
     
    		System.out.println("\nL'element courant :" + nNode2.getNodeName());
     
    		if (nNode2.getNodeType() == Node.ELEMENT_NODE) {
     
    			Element eElement = (Element) nNode2;
     
    			System.out.println("id : " + eElement.getAttribute("id")+"\t source :"+eElement.getAttribute("source")+"\tDestination :"+eElement.getAttribute("target"));
     
                            System.out.println("valeur : " + eElement.getElementsByTagName("data").item(0).getTextContent());
     
    		}
    	}
        } catch (Exception e) {
    	e.printStackTrace();
        }
      }
     
    }

    la question mtn comment extraire ces données de le ficheir graph ?

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Le choix entre une solution SAX (ou STAX éventuellement plus simple) et une solution DOM, pour lire un fichier XML, se fait surtout par rapport à la taille du fichier que par rapport à sa structure (si le fichier n'est pas trop grand, utiliser DOM peut faciliter les choses pour certains). En cas de choix de DOM, JDOM te sera plus simple qu'une solution native java, en particulier pour créer le fichier.

    Pour ce qui est de l'utilisation de JDOM, la documentation sur son site est relativement complète (javadoc, tutoriels).
    Pour l'utilisation de DOM natif, il y a un tutoriel sur le site d'Oracle.

Discussions similaires

  1. [XL-2010] Pb Macro pour ouvrir un fichier Word et copier des données dans des signets
    Par MPRIBOM dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/10/2014, 14h00
  2. [XML] Lire un fichier XML et Stockée les données dans la base
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 19/07/2013, 21h32
  3. Réponses: 4
    Dernier message: 24/02/2010, 09h31
  4. regénération d'un fichier xml et insertion des donnés
    Par totomimi dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 24/06/2009, 18h42
  5. [MySQL] utilisé un fichier XML pour stocker des données ?
    Par italiasky dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2007, 11h04

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