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 :

Lecture fichier XML via Java


Sujet :

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

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2018
    Messages : 59
    Points : 26
    Points
    26
    Par défaut Lecture fichier XML via Java
    Bonjour tous le monde ! Je reviens vers vous cette fois ci pour un petit problème ! J'explique tout d'abord mon projet : Je suis en train de créer une application Java, sous Netbeans, qui permettra de compléter un fichier excel en fonction de la lecture d'un fichier XML.

    Où j'en suis ? J'arrive à écrire/créer/éditer un fichier Excel. J'arrive à choisir quel fichier XML je veux, cependant, là où j'ai du mal c'est sur la lecture du fichier XML.

    J'ai un fichier comme ceci :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <etiquette>
    <client num="52121211"/> <!-- Numéro du client -->
    <modele type=1"/>
    <taille witdh="454"/>
    </etiquette>

    Et mon programme ressemble à 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
    45
    package xml.java;
     
    import java.io.File;
    import java.io.IOException;
    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.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
     
    public class XMLJAVA {
     
        public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
            final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            try {
                final DocumentBuilder builder = factory.newDocumentBuilder();
                final Document document = builder.parse(new File("C:/Users/stagibe/Desktop/exempleLOI.xml"));
     
                //Affiche l'élément racine
                final Element racine = document.getDocumentElement();
     
                final NodeList racineNoeuds = racine.getChildNodes();
     
                final int nbRacineNoeuds = racineNoeuds.getLength();
     
                for (int i = 0; i < nbRacineNoeuds; i++) {
                    if (racineNoeuds.item(i).getNodeType() == Node.ELEMENT_NODE) {
                        final Element client = (Element) racineNoeuds.item(i);
                        System.out.println("n client : " + client.getAttribute("num"));
                        final Element modele = (Element) racineNoeuds.item(i);
                        System.out.println("modèle : " + modele.getAttribute("type"));
                        final Element taille = (Element) racineNoeuds.item(i);
                        System.out.println("taille : " + modele.getAttribute("width"));
                    }
                }
     
            } catch (final ParserConfigurationException | SAXException | IOException e) {
            }
     
        }
     
    }
    Cependant, j'ai un problème en exécutant ce programme. Voici ce que j'ai d'afficher dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    n client : 52121211
    modèle :
    taille :
    n client :
    modèle : 1
    taille :
    n client :
    modèle :
    taille : 454
    En fait, mon programme lis tous le document pour rechercher un SEUL attribut, puis refait ceci pour le suivant, puis recommence pour le dernier. Mais j'aimerai que mon programme lises directement les attributs du document complet directement à la suite. J'aimerais une seule lecture du fichier.

    Je ne comprends pas ce que je dois faire.

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Plutôt que de faire du DOM, utilise les API JAXB ou SAX pour parser ton fichier XML

    https://jmdoudoux.developpez.com/cou...-jaxb.php#jaxb
    https://jmdoudoux.developpez.com/cou...ap-sax.php#sax
    Je ne suis pas mort, j'ai du travail !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2018
    Messages : 59
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par eulbobo Voir le message
    Plutôt que de faire du DOM, utilise les API JAXB ou SAX pour parser ton fichier XML
    En quoi il est mieux d'utiliser ces API là ? Quelles sont leurs avantages par rapport au DOM ? A ce que j'ai vu dans la programmation, et dans les liens que tu m'as donné, le DOM m'as l'air plus simple mais je vais essayer les autres.

    Dans le lien SAX que tu m'as donnée, je trouve comment récupérer des valeurs entre des éléments mais il n'y as pas de partie pour récupérer les attributs.

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Chaque passe du boucle ramasse un noeud qui peut être un élément ou pas un élément, d'ailleurs, et c'est ça que veut dire la combinaison d'usage avec .getChildNodes() et .item(i) et le test avec .getNodeType().
    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
                for (int i = 0; i < nbRacineNoeuds; i++) {
                    if (racineNoeuds.item(i).getNodeType() == Node.ELEMENT_NODE) {
                        final Element elem = (Element) racineNoeuds.item(i);
                        switch(elem.getTagName()) {
                            case "client":
                                System.out.println("n client : " + elem.getAttribute("num"));
                                break;
                            case "modele":
                                System.out.println("modèle : " + elem.getAttribute("type"));
                                break;
                            case "taille":
                                System.out.println("taille : " + elem.getAttribute("width"));
                                break;
                            default:
                                break;
                        }
                    }
                }

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2018
    Messages : 59
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup pour l'explication et pour le code ! Mon programme marche très bien, plus qu'à l'adapter à mon besoin maintenant !!

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par tomlrt53 Voir le message
    En quoi il est mieux d'utiliser ces API là ? Quelles sont leurs avantages par rapport au DOM ? A ce que j'ai vu dans la programmation, et dans les liens que tu m'as donné, le DOM m'as l'air plus simple mais je vais essayer les autres.
    Ben justement non, DOM n'est pas plus simple. En fait, DOM est extrêmement malaisé d'emploi, c'est son seul défaut mais c'est le défaut qui le définit, car c'est simplement ridicule à quel point il est compliqué de s'en servir.

    L'intérêt de quoi que ce soit d'autre que DOM, c'est que ça n'a pas le même défaut d'être compliqué sans raison comme ça.

    Mais bon, moi je ne recommanderais pas JAXB ni SAX. Je recommanderais JDOM 2.

    - JDOM 2 : c'est ce que le DOM aurait dû être en Java. Même principe, mêmes fonctionnalités, mais fait de sorte que ce soit utilisable et simple. Dans un monde où JDOM 2 existe, l'existence de DOM en Java n'a simplement aucun intérêt.

    - SAX : L'idée de SAX c'est de ne pas charger le fichier XML entièrement en mémoire, mais de lire ses éléments l'un après l'autre. C'est utile dans certains cas mais ce n'est pas vraiment ce qui t'arrange ici, donc bon, à oublier. De plus SAX est également trop compliqué à utiliser. Pour la même chose sur le même principe que SAX, c'est StAX qu'il faut utiliser, mêmes intérêts mais simple d'emploi.

    - JAXB : une manière de lire le XML en définissant des classes qui représentent le format du XML, du coup "lire un XML" crée une instance de la classe en question. Très pratique dans de nombreux cas, personnellement j'estime que ça demande trop de travail à mettre en place dans la situation que tu as, toi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2018
    Messages : 59
    Points : 26
    Points
    26
    Par défaut
    D'accord, donc je ne m'étais pas trompé en disant que SAX ou JAXB était trop complexe pour mon utilisation. Je vais regarder du côté de JDOM2 si ça peut alléger mon programme et le simplifier (simplifier surtout la compréhension).

    Merci tout de même pour ce comparatif.

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

Discussions similaires

  1. [JDOM] Problème de lecture d'un fichier XML avec Java
    Par thonath dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 27/05/2014, 11h52
  2. 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
  3. Lire fichier XML via code Java
    Par said.aghzil dans le forum Format d'échange (XML, JSON...)
    Réponses: 17
    Dernier message: 12/05/2013, 21h01
  4. 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

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