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 :

Comment Sérialiser un document en fichier xml? [DOM]


Sujet :

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

  1. #1
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut Comment Sérialiser un document en fichier xml?
    Bonjour,

    voilà j'ai un fichier XML que j'ai traité et modifié et je doit maintenant le sérialiser et l'enregistrer dans un fichier XML comment dois-je faire cette dernière étape ? Merci pour votre aide...

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Hello,
    A peu de chose près c'est :
    http://java.developpez.com/faq/xml/?..._DOM_to_string
    Faut juste utiliser un FileWriter à la place du StringWriter.

  3. #3
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    Pouvez vous m'expliquer un peu le code svp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Document document = ...;
    DOMSource domSource = new DOMSource(document);
    FileWriter writer = new FileWriter(new File(monfichier.xml));
    StreamResult result = new StreamResult(writer);
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    transformer.transform(domSource, result);
    String stringResult = writer.toString();
    Merci pour votre aide...

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je recommande fortement l'usage de la bibliothèque JDOM, et la lecture de sa JavaDoc. C'est beaucoup plus facile qu'avec la bibliothèque de base Java.

    Pour parser du XML, utiliser un SAXBuilder

    Pour le retransformer en texte, un XMLOutputter
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    La je suis dans le cadre des études donc c'est eux qui exigent la technologie à utiliser vous voyez ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Heu, ça reste du Java tout ça hein .

  7. #7
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    oui c'est du java mais j'ai meme pas trouvé de turoriel qui explique bien dessus... Merci pour votre aide...

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par zemzoum89 Voir le message
    La je suis dans le cadre des études donc c'est eux qui exigent la technologie à utiliser vous voyez ?
    Imposer SAX je pourrais encore comprendre, mais imposer le DOM de la bibliothèque de base, je vois pas trop l'intérêt pédagogique -_-°. Le principe fondamental de XML est de gagner du temps, pas d'en perdre.

    Enfin... T'y peux rien, mais il vaut mieux que tu le saches. C'est pas XML qui sert à rien : il t'a été mal enseigné, c'est tout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    Merci beaucoup pour votre aide c'est très gentil de votre part... La j'ai un autre problème maintenant c'est la sérialistion avec sax qui me pose problème, ce que j'ai pu comprendre c'est qu'il faut utiliser TransformerHandler...

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    En effet.

    La génération de XML avec SAX est assez peu abordée (je me demande d'ailleurs bien pourquoi, mais passons.) Vois un exemple ici : http://www.javazoom.net/services/new...eneration.html

    L'exemple 5, "JAXP + SAX + Serialization"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    regardez mon code la c'est ce que je fais mais la ça me crée un fichier vide quoi:
    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
    SAXParserFactory fabrique = SAXParserFactory.newInstance();
            try {
                SAXParser parseur= fabrique.newSAXParser();
                         XMLReader xmlReader =parseur.getXMLReader();
     
     
                fabrique.setValidating(true);
                this.setParent(xmlReader);
     
     
     
                    TransformerFactory factory = TransformerFactory.newInstance();
                    TransformerHandler transformerHandler = ((SAXTransformerFactory) factory).newTransformerHandler();
                    FileWriter fw = new FileWriter(new File("TP3_visite"));
                    StringWriter sw= new StringWriter();
                    Transformer serializer = transformerHandler.getTransformer();
                    StreamResult result = new StreamResult(sw);
                    transformerHandler.setResult(result); 
                    String stringresult = sw.toString();
                    fw.write(stringresult);
                    fw.close();
    Merci beaucoup d'essayer de m'aider...

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ben, forcément. Après avoir bien configuré ton TransformerHandler en lui indiquant où il doit écrire, il faudrait peut-être commencer à lui dire d'y écrire des choses, non ?

    startDocument(), startElement(), endElement(), endDocument()... Du SAX, quoi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    ben oui mais d'après ce que j'ai remarqué en redéfinissant la méthode startElement() il l'appelle tout seul

    Dans mon cas je lis si c'est ce qui m'arrange je modifie si non je fais rien et a la fin je voudrai avoir mon ancien fichier xml1 et un nouveau qui est ici TP3_xml.xml vous voyez?

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ça c'est quand tu lis. Maintenant, tu essaies de faire le contraire : écrire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    est ce que je suis obligé d'appeler starDocument meme j'en aurais pas besoin???


    et quand j'appelle starElement() comment dois-je savoir les attributs qu'elle contient alors que je vais faire des tests ???

    Merci de m'aider et excusez mon ignorance...

  17. #17
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par zemzoum89 Voir le message
    est ce que je suis obligé d'appeler starDocument meme j'en aurais pas besoin??
    Je vois pas bien comment tu pourrais ne pas en avoir besoin... Si tu veux générer un document, il faut bien le commencer...

    Citation Envoyé par zemzoum89 Voir le message
    et quand j'appelle starElement() comment dois-je savoir les attributs qu'elle contient alors que je vais faire des tests ???
    Ah oui, il faut le savoir de toute façon. Les tests, je vois pas ce qu'ils ont à voir avec ça. Il faut les faire, avant, après, je sais pas ce dont t'as besoin, mais en tout cas, quand tu appelles startElement() il faut savoir quels attributs tu vas mettre dedans.
    On te l'a dit, que SAX c'est pour travailler à la volée. Eh ben travailler à la volée, c'est ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    Je comprends toujours pas comment faire vu que je dois commencer le document et tout donc par exemple il y a les balises que je veux changer elle contiennent l'attribut "date-naissance" et les autres ne le contienne pas donc dans mon nouveau document je n'aurais pas tout mon document je n'aurais que ce que j'ai changé c'est ca ?

  19. #19
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Non mais en SAX il n'y a pas de notion de "changer."

    Soit tu lis un document en SAX : tu reçois les évènements du parseur.

    Soit tu écris un document en SAX : tu écris chaque évènement, et le serializeur s'occupe de les écrire en XML.

    C'est tout. SAX peut lire un document. SAX peut écrire un document. C'est l'un, ou c'est l'autre. Il n'y a pas d'histoire de modifier.

    Bien sûr rien ne t'empêche de construire un reader d'une part sur un fichier, de construire un writer d'autre part vers un autre fichier, et de lire d'un côté, regarder ce que ça donne, et en déduire quelque chose à écrire de l'autre côté.
    Mais ça, tu dois le faire tout seul. SAX ne peut pas modifier.


    C'est bien rentré, là, maintenant ? Bon. J'ai menti. Il y a un outils pour relier automatiquement un ContentHandler qui lit à un ContentHandler qui écrit. Ça s'appelle XMLFilterImpl. Par défaut il transmet tout de l'un à l'autre sans modification. Mais on peut faire une sous-classe qui redéfinit certaines méthodes, par exemple startElement(), par exemple pour changer les attributs qu'on passe de la lecture à l'écriture.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  20. #20
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    Ah ben c'est ce que j'utilise moi tenez je vous tout mon code la:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.StringWriter;
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
     
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.sax.SAXSource;
    import javax.xml.transform.sax.SAXTransformerFactory;
    import javax.xml.transform.sax.TransformerHandler;
    import javax.xml.transform.stream.StreamResult;
     
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.AttributesImpl;
    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.helpers.XMLFilterImpl;
     
     
    public class SaxParser extends XMLFilterImpl {
     
        /**
         * @param args
         * @throws IOException 
         */
     
        SaxParser () throws IOException{
            // le nom c filtre mais on pouvais utiliser handler si on était avec ContentHandler ou DefaultHandler
            SAXParserFactory fabrique = SAXParserFactory.newInstance();
            try {
                SAXParser parseur= fabrique.newSAXParser();
                // si on rajoute pas cette ligne on ne peut pas faire de setContentHandler
                XMLReader xmlReader =parseur.getXMLReader();
     
                // pour valider le code sans le modifier il faure faire ceci:
                fabrique.setValidating(true);
                this.setParent(xmlReader);
                // par défaut c'est ça: this.setContentHandler(xmlReader.getContentHandler());
     
                 // On va sérialisé le document modifié dans un new fichier XML
                // Ce qu'il faut utiliser Transformer et TranformerFactory
     
                // a la place de Transformer je dois utiliser TransformerHandler
     
     
                    TransformerFactory factory = TransformerFactory.newInstance();
                    TransformerHandler transformerHandler = ((SAXTransformerFactory) factory).newTransformerHandler();
                    FileWriter fw = new FileWriter(new File("TP3_visite"));
                    StringWriter sw= new StringWriter();
                    Transformer serializer = transformerHandler.getTransformer();
                    StreamResult result = new StreamResult(sw);
                    transformerHandler.setResult(result);
                    String stringresult = sw.toString();
                    fw.write(stringresult);
                    fw.close();
                   transformerHandler.startElement("", "animal", "animal", );
     
     
     
            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                System.err.println("Erreur lors de la cconfiguration du parseur");
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                System.err.println("Erreur de parsing");
            } catch (TransformerConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
     
        public void startElement(String uri, String localName, String qName, Attributes atts) {
     
            if (atts.getIndex("date-naissance")!= -1)
            {
                System.out.println("Elément rencontré : " + qName + "animal né le: "+ atts.getValue("date-naissance"));
     
     
     
            DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-mm-dd");
             Date date = null;
                try {
                    date = DATE_FORMAT.parse(atts.getValue("date-naissance"));
                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
     
                 Calendar TODAY = Calendar.getInstance();
                 Calendar cal = new GregorianCalendar();
                 cal.setTime(date);
                 // opérations et tests :
                 cal.add(cal.YEAR, 2);
     
                 if ( cal.after(TODAY) ) {
                     System.out.println("L'animal: "+ qName +"a moins de 2 ans il doit passer la" +
                             "visite médicale");
                     AttributesImpl attr = new AttributesImpl (atts);                 
                     attr.addAttribute(null, "", "viste-medicale", "CDATA" , "Animal en bonne santé");
                     atts= attr;
                                         }else{
                                             System.out.println("Cet animal a plus de 2 ans, il n'a pas besoin" +
                                                     "de passer la visite médicale, Merci");
                                         }
     
     
     
            }
                      }
     
     
    //fermuture de la class    
    }
    vous voyez??... Merci beaucoup pour votre aide...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment ajouter des élements À un fichier XML
    Par ryoussef19 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 09/07/2007, 09h14
  2. Réponses: 2
    Dernier message: 23/03/2007, 11h07
  3. Réponses: 3
    Dernier message: 20/05/2006, 20h42
  4. Réponses: 4
    Dernier message: 28/10/2005, 09h59
  5. [SimpleXML] Comment faire pour transformer un fichier XML en PHP ?
    Par magic8392 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2005, 16h22

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