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/Ecrire dans un fichier .xml depuis Java


Sujet :

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

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 33
    Points : 33
    Points
    33
    Par défaut Lire/Ecrire dans un fichier .xml depuis Java
    Bonjour a vous.
    Je cherche une personne qui pourrait me faire un petit cours sur comment lire du xml en java.
    Je sais, vous allez me dire qu'il y a déjà plein de tutoriaux dessus, mais pour moi, ils ne sont pas clair du tout.
    Je suis en train de chercher des docs dessus depuis ce matin, en vain.
    Je me perds entre les dom, les jdom, et les SAX.

    Alors, étape par étape, pourrait on me dire ce qu'on doit faire petit à petit.
    Attention, réalisant une application au sein d'un groupe, je ne peux pas installer trop de bibliothèques extérieurs... (le minimum quoi...)

    Merci d'avance.
    Jo

  2. #2
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  3. #3
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Alors à brule pourpoint, je ne saurais trop te dire si c'est vraiment le plus simple ou si c'est juste paraceque c'est ce que j'ai l'habitude d'employer, mais moi à ta place je partirais sur du JDOM. En d'autres termes il te faudrait utiliser la librairie JDOM afin de parser (analyser en anglais... et terme dédier pour l'analyse de flux/fichier XML) ton XML.

    Ensuite au niveau du code, tu ouvres ton fichier, tu crées un document JDOM basé sur ton fichier, grâce à un parser, et enfin tu te ballade dans ton Document JDOM pour y chercher ce que tu veux.
    Bon d'accord présenté comme ça, c'est pas forcément plus clair, alors je code...
    0) Etape préliminaire, les imports :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;
    Pris dans le tas, le XMLOutputter te servira à faire des sorties (écran ou fichier...).
    1) Considérons un fichier settings.xml qui se trouve dans le répertoire resources.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Get access to the settings file
                    SAXBuilder builder = new SAXBuilder();
                    Document settings = builder.build(new File("resources/settings.xml"));
                    Element root = settings.getRootElement();
    Je construit donc un document settings, qui est basé sur ce fichier. Ensuite, je récupère mon élément racine, que j'appelle root.
    2) Considérons la balise suivante comme faisant parti de mon document XML : "<defaultDir path="C:\mon chemin\mon répertoire" />". Comme tu peux le voir, il s'agit d'une balise defaultDir, avec un attribut texte nommé path. Je vais récupérer la valeur de cet attribut de cette balise.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    //Retrieve default directory from the settings file
                    String path = root.getChild("defaultDir").getAttributeValue("path");
    Et voilà, le travail est fait. Et c'est aussi simple que ça.
    Maintenant, si tu as plusieurs balises qui portent le même nom, à la place de la méthode getChild() tu risques d'avoir besoin de getChildren(), puis de te ballader dans la liste qui t'es renvoyée. Mais je te laisse expérimenter en ce sens.

    Ensuite, si tu avais voulu écrire dans un fichier, il te suffit d'avoir une variable de type file (ici settingsFile) et d'appliquer le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
              //Write this document into the sites.xml file
              XMLOutputter xmlOut = new XMLOutputter();
              xmlOut.setEncoding("UTF-8");
              xmlOut.output(settings, new FileOutputStream(settingsFile));
    (avec settings le document ci-dessus).

    Et si en plus tu veux modifier ton document, c'est possible aussi. Par exemple dans le code suivant je cherche l'existence de la balise defaultDir dont nous parlions ci-dessus, et si elle n'existe pas, alors je la rajoute à la racine de mon document :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Element defDirElement = root.getChild(Constants.DEFAULT_DIR);
              //Create element in the settings file if it does not exist
              if(defDirElement == null){
                  defDirElement = new Element(Constants.DEFAULT_DIR);
                  root.addContent(defDirElement);
              }
              //Define default directory attribute, in order to save 
              //default path for file choosers
              defDirElement.setAttribute(Constants.PATH, absolutePath);
    Bon en plus, pour me faciliter la chose, là je travaille avec des constante. Et absolutePath est du type String.

    Normalement, on a plus ou moins fait le tour. Si tu regardes bien, avec le code que je t'ai donné, tu peux aussi récupérer une balise pour la modifier (en utilisant un setAttribute. C'est d'ailleurs ce que je fais si jamais cette balise existe déjà...). Tu peux bien évidemment supprimer les balises dont tu n'as que faire et ainsi de suite.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  4. #4
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Tu peux aussi regarger cette api bien facile pour manipuler du XML

    http://xstream.codehaus.org/

  5. #5
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    je te conseille dom4j et jaxen...
    --
    Ludovic

  6. #6
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    Juste pour te conseiller au niveau des outils à utiliser.
    Sax est plus léger mais moins puissant que Dom. Il a de bien meilleurs performances. Il est donc utilisé pour lire un fichier XML de facon linéaire (du début à la fin en une fois).

    Dom permet de faire facilement des modifications au sein d'un fichier XML, des recherches...

    Dans la prise en main : Sax est plus verbeux, mais je pense qu'il est plus simple (car ce n'est que du java pure et simple sans complexité de noeux) à prendre en main pour un débutant total.
    Dom nécessite de se plonger dans le fonctionnement des arbres et de comprendre quelques "trucs" avant de l'utiliser avec aissance. Mais une fois cette étape passer, on apprécie sa rapidité d'utilisation.
    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
    "La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Je profite de ce sujet pour poser une petite question.
    Je dois, dans le cadre d'un stage en 3eme informatique, lire un fichier xml et en fonction des balises trouvés générer des slides powerpoint ( des que j'ai slide j'en créé un , ensuite si c'est un texte je l'ajoute, si c'est une image, j'ajoute une image, ...)
    J'ai utilisé dom pour parcourir mon fichier donc avec les getChildNodes, getAttributes etc.
    Est ce que j'ai bien fait? Ou aurais-je du utiliser Sax?
    Je lis partout que DOM stoque tout en mémoire mais qu'il est mieux fait pour parcourir, alors que Sax est plus rapide.
    Dans mon cas ou je ne dois que lire et traiter les balises que vaut il mieux utiliser?
    FC B you'll never walk alone
    There are only 10 types of people in the world: Those who understand binary, and those who don't

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    bonjour,

    Je te conseil d'utiliser le JDOM c'est en quelque sorte une concaténation des points positif du ‎dom et celle du sax ; donc le JDOM permit d’avoir l'hiérarchie de ton document (l’arbre xml) ‎on cas ou tu on a besoin et en plus il ne charge pas tout le document en mémoire (il travail par ‎événement), et il est très simple je te donne cette adresse et c'est très claire tu va comprendre ‎je t'assure

    Tutoriel jmd dans les cours et tutoriels de formation pour apprendre Java : http://java.developpez.com/cours/

    Mais reste que tu choisi l’api selon tes besoin c’est a toi de voir, ‎

    bon courage

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Merci pour ta réponse,

    Mais je ne comprends pas trop ce qu'on veut dire par "évenementiel" pour SAX?? cela signifie que si il est sur un noeud il n'a plus en mémoire le noeud précédent? J'ai compis qu'il réagissait a chaque évement donc ouverture de balise, fermeture ,etc mais perd il a chaque fois les informations précédente lorsqu'il réagit a un nouvel évènement?
    FC B you'll never walk alone
    There are only 10 types of people in the world: Those who understand binary, and those who don't

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    ‎ Bonjour,‎
    Oui c'est ça, le sax ne garde aucune information sur l'organisation de ton document il ne ‎connaît pas -par exemple- le père d'un noeud

    Le sax est fait tous simplement pour lire un document XML est faire des traitement que tu ‎dois enregistrer toi-même, mais si tu as besoin de l’organisation de ton document et de savoir ‎l’endroit des élément (je veux dire les balise) tu ne peux pas utiliser le sax et en plus le JDOM ‎et plus simple a mon avis, explique nous ce que tu veux faire exactement et on pourra te ‎conseiller sur l’api la plus adapté a ton cas ‎

    Bon courage ‎
    @ bientôt ‎

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Je dois donc parcourir un fichier xml contenant toute sortes de balises et certaines balises <slide> contenant elles meme des balises <image>, <table>,<text> . Et en fonction de la balise rencontré je dois effectuer un traitement particulier a savoir les ajouter a des slides powerpoint.
    FC B you'll never walk alone
    There are only 10 types of people in the world: Those who understand binary, and those who don't

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour, ‎

    oui si tu veux tt simplement parcourir le document plat sans autant avoir besoin de son ‎hiérarchie le sax est le meilleur dans ce cas,d'après ce que tu vient de nous dire tu n'a pas ‎besoin de l'hiérarchie donc tu peut utilisé le sax il te suffira largement ‎et il est plus souple

    bon courage et Bonne continuation ‎

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    J'ai quand meme besoin de Dom je pense parce que j'utilise la hierarchie.
    dans un tableau par exemple c un peu du style
    <table>
    <row>
    <cell></cell>
    <cell></cell>
    <row>
    ....
    </row>
    </table>
    et pour du texte c la meme chose avec des balises <bold> etc...
    Sorry je n'etais pas assez complet.
    Par contre, dois je obligatoirement utilisé :
    import javax.xml.parsers.*; ou qqchose du style pr parser en plus de DOM?
    DOM est une représentation du résultat t'un parseur, mais le parseur en lui meme n'est pas dans DOM c'est cela?
    FC B you'll never walk alone
    There are only 10 types of people in the world: Those who understand binary, and those who don't

  14. #14
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    En effet...

    L'équipe de Sun a implémenté un parseur DOM qui s'appelle JAXP.
    Sinon comme te l'a dit kaninama JDOM implémente en parti DOM et SAX. Il devrait te suffir largement pour ce que tu veux faire.

    Je ne suis pas en train de précher pour JDOM, c'est juste que je ne connais ni JAXP ni une autre implémentation de DOM
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

Discussions similaires

  1. [JDOM] ecrire dans un fichier XML en java
    Par sampaiX dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 02/05/2010, 02h24
  2. lire dans un fichier xml depuis une tâche ant
    Par wildmary dans le forum ANT
    Réponses: 7
    Dernier message: 03/08/2009, 12h51
  3. lire et ecrire dans un fichier.doc en java
    Par devamine dans le forum Documents
    Réponses: 8
    Dernier message: 08/07/2008, 08h12
  4. [exemple] lire / ecrire dans un fichier XML
    Par waldoun dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 30/04/2008, 20h02
  5. Réponses: 0
    Dernier message: 11/02/2008, 11h37

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