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 :

Probleme de lecture d'un fichier xml avec java avec l'API DOM [DOM]


Sujet :

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

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Points : 52
    Points
    52
    Par défaut Probleme de lecture d'un fichier xml avec java avec l'API DOM
    Bonjour;

    Je suis entrain de réaliser un petit programme en java pour lire un fichier XML, mais le problème est que, j'ai un message d'erreur qui me dit qu'il ne trouve pas mon fichier xml alors que mon fichier xml et mon fichier java se trouve dans le même répertoire.
    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
    package test;
     
    import java.io.IOException;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.swing.*;
    import org.w3c.dom.*;
    import org.xml.sax.SAXException;
     
    public class LectureXmll {
     
    	public static void main(String[] args) {
     
    		try {
     
    			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    			DocumentBuilder builder = factory.newDocumentBuilder();
    			Document document = builder.parse("fichier.xml");
    			NodeList elements =  document.getElementsByTagName("");
    			Element elementClient = (Element)elements.item(0);
    			String message = "nom"+elementClient.getAttribute("nom");
    			Text donneesTexte = (Text)elementClient.getFirstChild();
    			message += donneesTexte.getData();
    			JOptionPane.showMessageDialog(null, message);
     
    		}catch(ParserConfigurationException | SAXException|IOException ex){
    			JOptionPane.showMessageDialog(null, "Probleme "+ex.getMessage());
     
    		}
    	}
     
    }
    Voici une partie du code du fichier XML, le nom du fichier est: 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
    <conf>
     
    		<fab type="fabric-matiere1ere">
    			<icones>
    				<icone type="vide" path="src/image/fa0%.png"/>
    				<icone type="un-tier" path="src/image/fa33%.png"/>
    				<icone type="deux-tiers" path="src/image/fa66%.png"/>
    				<icone type="plein" path="src/image/fa100%.png"/>
    			</icones>
    			<sortie type = "matiere1ere"/>
    			<temp-production>100</temp-production>
    		</fab>
    		<fab type="fab-autre">
    			<ic>
    				<icone type="vide" path="src/image/ba0%.png"/>
    				<icone type="letier" path="src/image/ba33%.png"/>
    				<icone type="moitie" path="src/image/ba66%.png"/>
    				<icone type="plein" path="src/image/ba100%.png"/>
    			</ic>
    			<entree type="metal" quantite="2"/>
    			<sortie type="autre"/>
    			<temp-production>50</temp-production>
    		</fab>
    </conf>
    Je souhaite récupérer les chiffres par exemple le 50 et le 100,... les mettrent dans une variable.
    Une dernière question,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <icone type="plein" path="src/image/ba100%.png"/>
    cette ligne indique le chemin d'une image et ce que c'est possible de récupérer cette image avec java en passant par la lecture du fichier xml et l'afficher dans ma boite de dialogue swing, comme la récupération des chiffres, si oui quel est le moyen le plus simple?
    Merci d'avance, j'ai passé plusieurs heures à chercher sur google mais en vain.
    Une capture d'ecran:
    [ATTACH=CONFIG]342542
    [/ATTACH]
    Images attachées Images attachées  

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 613
    Points
    21 613
    Par défaut
    Hello,

    Citation Envoyé par Khalfe Voir le message
    alors que mon fichier xml et mon fichier java se trouve dans le même répertoire.
    Ben justement...

    Un fichier Java ça doit normalement être dans le classpath, c'est-à-dire à vocation d'être assemblé dans une archive .jar.
    Alors qu'un fichier de ressource normal, ça doit être un simple fichier du disque dur.

    Donc, forcément, pas au même endroit...

    Pour tester il suffit que tu mettes ton fichier XML à la racine du projet. Pas dans test, pas dans src, mais dans Lab01. Enfin, par défaut, hein. Après ça dépend ce que tu configures comme répertoire de travail quand tu lances ton programme. Il faut que ton fichier XML soit dans le répertoire de travail.

    Mais bon, ça c'était pour tester.

    En pratique c'est peut-être une bonne chose que ton fichier XML fasse partie du programme et soit assemblé dans un .jar à la fin avec le reste du programme. Bref qu'il soit aussi dans le classpath et avec tes fichiers .java...
    Mais dans ce cas tu peux pas le charger avec DocumentBuilder.parse(String), qui n'accepte que des URI... et les URI vers le classpath, ça n'existe pas.

    Il faut utiliser DocumentBuilder.parse(InputStream), et que ce soit toi qui te charges de charger le fichier dans un InputStream. Le DocumentBuilder, lui il ne s'occupe que de le parser.

    Quelque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try(InputStream stream = LectureXmll.class.getResourceAsStream("fichier.xml")) {
     
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse(stream);
     
      // ... traitement
     
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Points : 52
    Points
    52
    Par défaut
    Merci pour ta réponse et tes explications,
    Je n'utilise pas le .jar dans le travail que je suis entrain de faire. J'ai un répertoire dans le quel j'ai les repertoires src et le ressource normalement.
    Le repertoire src contient les fichiers java et le repertoire ressource contient les autres fichiers xml, images....Mon fichier xml doit être normalement dans ressource, mais pour le moment c'est un test de lecture avant de le mettre dans sa place, d'ailleurs j'ai même essayer de le mettre dans son répertoire en utilisant le chemin /ressource/fichier.xml mais c'est pareil.

    En revenant sur ta réponse, j'ai essayé de mettre mon fichier xml dans répertoire racine Lab01 Nom : Sans titre.jpg
Affichages : 842
Taille : 13,4 Koc'est pareil d'ailleurs j'ai changer le contenue du fichier xml pour faire plus simple comme suit
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <contacts>
          <personne id="1">
                <nom>codeur</nom>
                <prenom>java</prenom>
                <phone>054124587</phone>
                <email>codeurjava@gmail.com</email>
          </personne>
          <personne id="2">
                <nom>codeur</nom>
                <prenom>c++</prenom>
                <phone>062148795</phone>
                <email>codeurcplusplus@gmail.com</email>
          </personne>
    </contacts>
    Mais ça ne change absolument rien.
    J'ai essayé aussi de modifier le code comme tu l'a suggeré avec le InputStream, mais là j'ai une exception

    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
    package test;
     
    import java.io.IOException;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.swing.*;
     
    import org.omg.CORBA.portable.InputStream;
    import org.w3c.dom.*;
    import org.xml.sax.SAXException;
     
    public class LectureXmll {
     
    	public static void main(String[] args) {
     
    		try(InputStream stream = (InputStream) LectureXmll.class.getResourceAsStream("fichier.xml")) {
     
    			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    			DocumentBuilder builder = factory.newDocumentBuilder();
    			Document document = builder.parse(stream);
    			NodeList elements =  document.getElementsByTagName("");
    			Element elementClient = (Element)elements.item(0);
    			String message = "nom"+elementClient.getAttribute("nom");
    			Text donneesTexte = (Text)elementClient.getFirstChild();
    			message += donneesTexte.getData();
    			JOptionPane.showMessageDialog(null, message);
     
    		}catch(ParserConfigurationException | SAXException|IOException ex){
    			JOptionPane.showMessageDialog(null, "Probleme "+ex.getMessage());
     
    		}
    	}
     
    }
    Voici l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.lang.IllegalArgumentException: InputStream cannot be null
    	at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    	at test.LectureXmll.main(LectureXmll.java:22)
    Je ne sais même plus quoi faire, je suis complètement perdu, hier j'ai passé toute ma journée dessus.
    Merci d'avance.

  4. #4
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut,
    as essaies ceci :
    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
     
    import java.io.File;
    import java.io.IOException;
     
    import javax.swing.JOptionPane;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Text;
    import org.xml.sax.SAXException;
     
    public class LectureXmll {
     
    	public static void main(String[] args) {
     
            File fileXML = new File("fichier.xml");
    		try{
     
    			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    			DocumentBuilder builder = factory.newDocumentBuilder();
     
    			Document document = builder.parse(fileXML);
    			Element root = document.getDocumentElement();
    			System.out.println(root.getNodeName());
     
    			NodeList elements =  document.getElementsByTagName("nom");
    			Element elementClient = (Element)elements.item(0);
    			String message = "nom" + elementClient.getTextContent();
     
    	         Text donneesTexte = (Text)elementClient.getFirstChild();
    			message += donneesTexte.getData();
    			JOptionPane.showMessageDialog(null, message);
     
    		}catch(ParserConfigurationException | SAXException|IOException ex){
    			JOptionPane.showMessageDialog(null, "Probleme "+ex.getMessage());
     
    		}
    	}
     
    }
    Eric

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 613
    Points
    21 613
    Par défaut
    @Khalfe :

    Quand tu essaies une chose, montre le code, et montre où sont les fichiers. Puis quand tu as une erreur ou n'importe quel résultat,
    copie/colle cette erreur et ce résultat.

    Ensuite explique en quoi consistait cet essai et ce qui te plaît, ne te plaît pas avec.

    Puis refait toutes ces mêmes choses avec l'essai suivant, et ainsi de suite.

    Nous ne pouvons pas t'aider si tu nous dis en substance, "bon ben j'ai essayé des trucs et ça ne marche pas."
    Pour chaque truc : le code, les fichiers, le résultat, une description.
    Pas essayer de faire le tout pour tout ce que tu as essayé. C'est inutile.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Points : 52
    Points
    52
    Par défaut
    Merci à vous tous, en fait le fichier devait être dans un autre dossier et ajouter le chemin dans mon code.

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

Discussions similaires

  1. [StAX] charger un fichier xml en java avec StAX
    Par fruwen7 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 02/07/2012, 20h07
  2. Probleme de lecture d'un fichier xml (WP7)
    Par yassineonline dans le forum Windows Phone
    Réponses: 3
    Dernier message: 24/07/2011, 22h19
  3. Lecture d'un fichier XML de config avec Java
    Par cofy dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 31/01/2006, 15h54
  4. Probleme de lecture d'un fichier XML
    Par chleuh dans le forum Langage
    Réponses: 8
    Dernier message: 30/08/2005, 12h04

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