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 :

Lire fichier XML via code Java


Sujet :

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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 20
    Points
    20
    Par défaut Lire fichier XML via code Java
    Bonjour,

    Je vous fait appel afin de m'aider à résoudre mon problème avec XML. En fait je veux extraire le contenu de certaines balises via un code java.
    Voici a quoi ressemble mon fichier XML :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE Pige SYSTEM "test.dtd">
    <Pige date1="14/02/2013" dateGeneration="02/15/2013 12:19:50 AM">
    <A id="99">
    <B id="3708621" code="33083"   niveau="1" >
    <C Code1="1207" Code2="" />
    </B>
    </A>

    Et voici mon code java :

    Code java : 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
    import java.io.File;
    import java.io.IOException;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
     
     
    public class said {
     
     
    	public static void main(String[] args) {
    	SAXBuilder builder=new SAXBuilder();
     
            try {
     
    		Document readDoc=builder.build(new File("test.xml"));
    			Element root=readDoc.getRootElement();
     
    			for(Element cur:root.getChild("A").getChildren("B")){
     
     
    				System.out.println(cur.getAttributeValue("Code1"));
    			}
     
     
     
     
    		} catch (JDOMException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
    }

    Mais à la fin il m'affiche les nulls, je ne sais pas pourquoi et je suis bloqué là dessus.
    Au plaisir de vous lire, bien à vous.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Ça doit être parce que Code1 est un attribut de la balise C, pas de la balise B.
    Comme tu ne le demandes que sur la balise B et que cet attribut n'y existe pas, getAttributeValue() renvoie null, comme attendu.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    oui, mais moi j'ai besoin de la valeur du Code1, est ce que vous avez des suggestions ??
    merci bcq

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Oui, je suggère d'aller la chercher sur la balise C, au lieu de la balise B. Là où elle est, donc. Ça marcherait sûrement mieux.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Bonjour,
    tout d'abord je vous remercie infiniment

    apres avoir mettre en place votre suggetions, voici mon code :

    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
    import java.io.File;
    import java.io.IOException;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
     
     
    public class said {
     
     
    	public static void main(String[] args) {
    	SAXBuilder builder=new SAXBuilder();
     
            try {
     
    		Document readDoc=builder.build(new File("test.xml"));
    			Element root=readDoc.getRootElement();
     
    			for(Element cur:root.getChild("A").getChildren("C")){
     
     
    				System.out.println(cur.getAttributeValue("Code1"));
    			}
     
     
     
     
    		} catch (JDOMException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
    }
    mais le résultat en exécutant n'est pas agréable l'IDE m'affiche :
    run:
    BUILD SUCCESSFUL (total time: 2 seconds)

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Humm. root.getChild("A").getChildren("C").
    Est-ce que C est un enfant de A ? En regardant ton XML, j'ai bien l'impression que C est un enfant de B.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    voila ce que j'ai comme résultat si je mettre en place votre remarque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    run:
    Exception in thread "main" java.lang.NullPointerException
    	at said.main(said.java:20)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)
    est ce que ça a un rapport avec le namespace ??

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par said.aghzil Voir le message
    voila ce que j'ai comme résultat si je mettre en place votre remarque
    Ça pourrait être utile de voir comment tu as mis en place cette remarque.
    Le code, donc.

    Citation Envoyé par said.aghzil Voir le message
    est ce que ça a un rapport avec le namespace ??
    Il n'y a pas de namespace dans le XML que tu donnes en exemple, donc a priori, non.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ça pourrait être utile de voir comment tu as mis en place cette remarque.
    Le code, donc.

    voici le code :
    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
    import java.io.File;
    import java.io.IOException;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
     
     
    public class said {
     
     
    	public static void main(String[] args) {
    	SAXBuilder builder=new SAXBuilder();
     
            try {
     
    		Document readDoc=builder.build(new File("test.xml"));
    			Element root=readDoc.getRootElement();
     
    			for(Element         cur:root.getChild("B").getChildren("C")){
     
     
    				System.out.println(" "+cur.getAttributeValue("Code1"));	}
     
     
     
     
    		} catch (JDOMException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
    }

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    Je me permets d'abreger le suspens....

    Il faut parcourir tous les elements jusqu'à C qui contient l'attribut désiré

    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
    import java.io.File;
    import java.io.IOException;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
     
     
    public class said {
     
     
    	public static void main(String[] args) {
    	SAXBuilder builder=new SAXBuilder();
     
            try {
     
    		Document readDoc=builder.build(new File("test.xml"));
    			Element root=readDoc.getRootElement();
     
    			for(Element cur:root.getChild("A").getChildren("B").getChildren("C")){
     
     
    				System.out.println(cur.getAttributeValue("Code1"));
    			}
     
     
     
     
    		} catch (JDOMException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
    }

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Abrégé un peu vite.
    Ça compile pas, ton truc : getChildren() renvoie une List, et une List ne permet pas d'appeler getChildren() dessus à nouveau.

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    oups j'arrive

    deuxième essai:

    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
     
    import java.io.File;
    import java.io.IOException;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
     
     
    public class said {
     
     
    	public static void main(String[] args) {
    	SAXBuilder builder=new SAXBuilder();
     
            try {
     
    		Document readDoc=builder.build(new File("test.xml"));
    		Element root=readDoc.getRootElement();
     
    		for(Element cur:root.getChild("A").getChild("B").getChildren("C")){
     
    			System.out.println(cur.getAttributeValue("Code1"));
    		}
     
     
     
     
    		} catch (JDOMException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
    }

  13. #13
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    bonjour,
    je vous remercie tous pour vos réponses qui m'ont donné l'espoir de trouver une solution à mon problème qui persistait depuis longtemps

    bon après avoir modifier ce que vous m'avez proposé, malheureusement j'ai pas encore le résultat souhaité et à la fin de compilation IDE m'affiche rien que :

    run:
    BUILD SUCCESSFUL (total time: 0 seconds)

  14. #14
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Et tu le lances comment ?

    Si tu fais System.out.println("Bonjour tout le monde !"); au début de ton main(), ça s'affiche ?

  15. #15
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    oui, il affiche Bonjour tout le monde ! si je fait au debut de main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Bonjour tout le monde !");

  16. #16
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    bonjour,

    je viens de tester ma proposition fonctionne bien.

    J'ai du enlever le doctype de ton xml car je n'ai pas le .dtd

    Et j'ai fermé la balise root </Pige> à la fin du xml


    test.xml:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <Pige date1="14/02/2013" dateGeneration="02/15/2013 12:19:50 AM">
    <A id="99">
    	<B id="3708621" code="33083"   niveau="1" >
    		<C Code1="1207" Code2="" />
    	</B>
    </A>
    </Pige>

    said.java:

    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
     
     
    import java.io.File;
    import java.io.IOException;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
     
     
    public class said {
     
    	public static void main(String[] args) {
    	SAXBuilder builder=new SAXBuilder();
     
            try {
    		Document readDoc=builder.build(new File("test.xml"));
    		Element root=readDoc.getRootElement();
    		for(Element cur:root.getChild("A").getChild("B").getChildren("C")){
     
    			System.out.println(cur.getAttributeValue("Code1"));
    		}
     
    		} catch (JDOMException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
    }

  17. #17
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    voici la solution,

    j'ai renommé le .dtd en Pige.dtd car dans ton .xml il est nommé ainsi.

    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
     
    import java.io.File;
    import java.io.IOException;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
    import java.util.List;
     
     
    public class said {
     
     
    	public static void main(String[] args) {
    	SAXBuilder builder=new SAXBuilder();
     
            try {
     
    		Document readDoc=builder.build(new File("3EmoSfLhZog_mm.xml"));
    		Element root=readDoc.getRootElement();
     
     
    		List child1 = root.getChild("Chaine").getChildren();
    		for(int i=0; i< child1.size();i++) {
    			Element e = (Element)child1.get(i);
    			if (e.getChild("TarifPub") != null) {
    				System.out.println("Diffusion id: " + e.getAttributeValue("id"));
    				System.out.println("CodeEcran: " + e.getChild("TarifPub").getAttributeValue("CodeEcran"));
    				System.out.println();
    			}		
    		}
     
    		} catch (JDOMException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }

  18. #18
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    ouéééééééééééééééééééééh et enfin
    merci beaucoup infiniment, toute chose qu'on peut dire dans cette situation
    vraiment je sais pas comment vous remercie, merci encore une fois

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

Discussions similaires

  1. remplir fichier XML via code Java
    Par sillimi18 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 13/05/2013, 09h46
  2. Ajouter un root element à un fichier XML via Java
    Par filor dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 09/09/2009, 14h57
  3. ouvrir et lire document pdf via code java
    Par loic20h28 dans le forum API standards et tierces
    Réponses: 39
    Dernier message: 04/03/2009, 13h43
  4. Comment lire des données d'un fichier XML à partir de java
    Par kamaldev dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 25/08/2006, 19h29
  5. Lire fichier XML en java
    Par loop4 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 17/05/2006, 16h46

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