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 plusieurs fichiers xml pour en faire 1 [JDOM]


Sujet :

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

  1. #1
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut Parser plusieurs fichiers xml pour en faire 1
    besoin d'aide SVP !

    Bonjour,
    Voilà, je développe un programme me permettant de parser des fichiers xml à l'aide de SAX et je rencontre un problème car je souhaiterai pouvoir parcourir plusieurs fichiers xml et ne récupérer qu'une seule Collection commune à tous les fichiers et non une par fichier.
    Voici une partie de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    XYSeriesCollection result = null;
    SAXParserFactory factory = SAXParserFactory.newInstance();
    try {
    SAXParser parser = factory.newSAXParser();
    XYseriesDatasetHandler handler = new XYseriesDatasetHandler(field);
    parser.parse(in, handler);
    result = handler.getDataset();
    }
    catch (SAXException e) {
    System.out.println(e.getMessage());
    }
    J'espère que je me suis pas trop mal expliqué.
    Merci par avance pour vos réponse.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Si ton objet XYSeriesCollection implémente correctement l'interface Collection, il doit disposer d'une méthode addAll(Collection).

    Il te suffit d'utiliser celle-ci pour ajouter des données dans ta collection au lieu d'écraser celles qu'elle contient du précédent fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Collection resultat = new LinkedList();
    Collection resultatUnitaire = null;
     
    for(unFichierXML: listeDeTesFichiers) {
       resultatUnitaire = traitementUnitaireFichierXML(tonFichierXML);
       resultat.addAll(resultUnitaire);
    }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    Merci pour ta réponse assez rapide.
    Le problème c'est que j'utilise un XYseriesDatasetHandler pour pouvoir lire mon fichier et qu'il me retourne une XYSeriesCollection qui ne contient pas de méthode addAll(Collection). J'ai effectivement une méthode addSeries(XYSeries) mais que je ne peut pas utiliser dans ce cas là.
    Le but de mon programme est d'afficher des courbes dans un graphique, jusque là rien de bien sorcier mais comme je récupère plusieurs XYSeriesCollection mon graphique affiche plusieurs courbes ce qui est normal. Moi je voudrai afficher une seule courbe mais dont les données sont dans plusieurs fichiers xml.
    Est-ce que je peux utiliser JDOM pour créer un fichier xml dont le contenu est plusieurs fichiers xml ?

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par Mygush
    Est-ce que je peux utiliser JDOM pour créer un fichier xml dont le contenu est plusieurs fichiers xml ?
    La même question a dû être posée hier. Et la réponse est oui!

    Tu utilises JDom pour ouvrir tes différents fichiers en lecture, et tu recopies les éléments de ces fichiers qui t'intéressent dans un nouvel élément JDom en les réarrangeant comme tu veux (suppression de doublons, filtrages, ...)

    Ensuite, il ne te reste plus qu'à réécrire cet élément dans un fichier XML (l'API JDom fournit évidemment la méthode d'écriture)
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    Je suis désolé si j'ai posé la même question qu'hier pourtant j'ai consulté le forum avant... Faut croire que je suis vraiment fatigué ou alors j'ai besoin de lunettes...
    Je regarde si je peux résoudre mon problème en passant par JDOM.
    Merci pour ta réponse.

  6. #6
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    C'est à nouveau moi,
    En fait j'utilise JDom pour la première fois et je n'arrive pas à créer un fichier xml à partir d'autres fichiers xml. J'ai systématiquement une erreur du type 'org.jdom.IllegalAddException' lorsque j'essaie d'ajouter le contenu d'un fichier xml dans un nouveau fichier. 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
     
    public static Element parserXml(InputStream in) {
            SAXBuilder sxb = new SAXBuilder();
            Document document = new Document();
            try {
                document = sxb.build(in);
            } catch(Exception e){
                e.printStackTrace();
            }
            racine = document.getRootElement();
            return racine;
        }
    A chaque fois que cette méthode est appelé dans une boucle, j'ajoute mon element dans un nouveau document qui doit contenir tous mes élements ajoutés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // j'initialise mon document
    //j'exécute ma boucle ci-dessus...
    //une fois l'élément retourné je fais :
    document.addContent(element);
    ce qui me donne comme erreur : org.jdom.IllegalAddException 
    car apparemment j'ai déjà ma racine
    Est-ce que quelqu'un peut m'aider SVP ?
    Merci d'avance!

  7. #7
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    C'est normal. Un Element Jdom ayant déjà un parent (dans l'arbre XML) ne peut pas être utilisé directement pour être ajouté à un autre noeud (du même document ou d'un autre). Il faut donc le dupliquer.

    Je ne crois pas que JDom propose cette méthode (mais je peux me tromper), aussi quand j'avais eu ce problème, j'avais développé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public static Element duplicateElement(Element element) {
       Element result = new Element(element.getName());
       result.addContent(0, element.cloneContent());
       Iterator i = element.getAttributes().iterator();
       Attribute attrib = null;
       while(i.hasNext()) {
          attrib = (Attribute) i.next();
          result.setAttribute(attrib.getName(), attrib.getValue());
       }
       return result;
    }
    L'élément obtenu par ma méthode de duplication peut être ajouté dans ton nouveau fichier XML. Evidemment, cet élément est la copie exacte de l'élément original.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Pour detacher l'element tu peux essayer
    element.detach();

  9. #9
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    Avant tout merci pour ta réponse CyberChouan, ça m'a résolu un pb sur lequel je voyais pas trop de solution...
    En revanche j'ai toujours un pb car maintenant j'ai 1 erreur un peu différente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.jdom.IllegalAddException: Cannot add a second root element, only one is allowed
    Je comprend bien l'erreur mais j'arrive toujours pas à faire en sorte de récupérer le contenu de deux fichiers xml sans récupérer le root element...
    Peut-être avec la solution element.detach().
    Je suis vraiment désolé mais là j'avoue que je bloque pas mal...

  10. #10
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    element.detach() => bien vu! cette méthode m'avait échappé (j'avais dû lire l'API un peu vite à l'époque )

    je crois que tu interprête mal ton message d'erreur: le problème ne vient pas de ta lecture des fichiers XML mais de la construction de ton nouveau fichier.

    Un fichier XML a une et une seule balise racine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <racine>
    ce que tu veux
    </racine>
    Ce que tu tentes de créer, c'est un fichier de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <racine1>ce que tu veux</racine1>
    <racine2>ce que tu veux bis</racine2>
    Et ça, ce n'est pas autorisé!

    Donc soit tu inclus le contenu d'un de tes fichiers dans la racine du premier, soit tu crées une "super-racine" qui englobe les racines de tes 2 fichiers XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <racine>
       <racine de ton fichier XML n°1 />
       <racine de ton fichier XML n°2 />
    </racine>
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  11. #11
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    En fait je me suis mal exprimé, j'ai bien compris l'erreur mais le problème c'est que je n'arrive pas créer une Super-Racine englobant les deux ou à écrire le contenu de mon 2e fichier dans la racine de mon nouveau fichier.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static Element racine = new Element("SuperRacine");
    static org.jdom.Document document = new Document(racine);
    Element element;
     
    boucle for {
    // j'utilise ma méthode pour lire mon fichier
    element = jdom.parseXml(in);
    // j'utilise ta fonction ;) qui duplique mon fichier
    document.addContent(jdom.duplicateElement(element));
    J'ai essayé tout un tas de possibilité mais je n'y arrive toujours pas !!!

  12. #12
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    En fait c'est bon le fait d'écrire mon code m'a permis de voir l'erreur, en fait au lieu d'ajouter le contenu de mes fichier dans ma "super-racine", j'ajoutais directement dans le document donc forcément conflit au niveau des racines.
    UN GRAND MERCI POUR VOTRE AIDE

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

Discussions similaires

  1. [DOM XML] Parser un fichier XML pour insertion dans la base
    Par npirard dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 08/09/2008, 15h44
  2. Réponses: 1
    Dernier message: 09/10/2007, 19h31
  3. [JDOM] Problème pour parser un fichier XML [débutant]
    Par adn013 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/05/2007, 12h00
  4. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  5. [XML][Java] parser plusieurs fichiers en un seul arbre DOM ?
    Par mrlenul dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/11/2005, 11h09

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