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 :

Création de fichier XML [DTD]


Sujet :

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

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut Création de fichier XML
    Bon, là je ne suis pas malin, mais bon.
    J'ai besoin de vous pour éclaircir mes idées.
    J'ai définit un formaliste pour mon document XML :

    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE publipostage PUBLIC "-//" "publipostage.dtd">
     
     
    <publipostage>
     
     <fields id="user">
      <field id="nom">Nom du collaborateur</field>
      <field id="prenom">Prénom du collaborateur</field>
     </fields>
     
     <user>
      <fields>
       <field id="nom">GOUBE</field>
       <field id="prenom">Olivier</field>
      </fields>
     </user>
     
     <fields id="customer">
      <field name="nom">Nom du contact</field>
      <field name="prenom">Prénom du contact</field>
      <field name="adresse">Adresse du contact</field>
     </fields>
     
     <customer>
      <fields>
       <field name="nom">COLLARD</field>
       <field name="prenom">Alexandre</field>
       <field name="adresse">Rue du mec bourré</field>
      </fields>
     </customer> 
     
     <customer>
      <fields>
       <field name="nom">HUMEAU</field>
       <field name="prenom">Xavier</field>
       <field name="adresse">Rue du mec encore plus bourré</field>
      </fields>
     </customer>
     
     
    </publipostage>
    J'aimerai maintenant pouvoir le créer en Java.
    Alors j'ai commencé avec çà :

    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
     
    try{
             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
             DocumentBuilder db = dbf.newDocumentBuilder();
             Document doc = db.newDocument();         
             Element rootElement = doc.createElement("publipostage");
             Node node = doc.createElement("fields");
             rootElement.appendChild(node);
             doc.appendChild(rootElement);
     
     
             XMLUtils.writeDocument(doc, System.out);
     
     
             } catch(Exception ex){
                ex.printStackTrace();
             }

    Et voici le writeDocument :
    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
     
    public static boolean writeDocument(Document doc,OutputStream out){
         try{
            // Use a Transformer for output
            TransformerFactory tFactory =
               TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer();
     
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(out);
            transformer.transform(source, result); 
            return true;
         } catch(Exception ex){
            ex.printStackTrace();
            return false;
         }
      }
    Et voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?xml version="1.0" encoding="UTF-8"?><publipostage><fields/></publipostage>
    Donc avec çà, j'ai un bon résultat déjà ! Mais j'aimerai changer l'attribut "encoding" de ma première ligne car avec ma solution actuellement, il me mets UTF-8.
    Ensuite j'aimerai ajouter la ligne correspondant à l'appel de ma DTD qui est pour moi la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <!ELEMENT publipostage (fields+,user,customer*)>
     
    <!ELEMENT fields (field+)>
    <!ATTLIST fields  id              CDATA              #IMPLIED>
     
    <!ELEMENT field (#PCDATA)>
    <!ATTLIST fields  id              CDATA              #IMPLIED>
    <!ATTLIST fields  name            CDATA              #IMPLIED>
     
    <!ELEMENT user (fields)>
     
    <!ELEMENT customer (fields)>
    Alors si quelqu'un peut m'aider pour toutes ces petites choses ....
    Ce serait sympa.
    D'avance merci .

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Utilise la méthode "setOutputProperty" sur le transformer comme décrit ci-dessous, je me suis permis de compléter ton code...
    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
     
    public static boolean writeDocument(Document doc,OutputStream out){
         try{
            // Use a Transformer for output
            TransformerFactory tFactory =
               TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer();
     
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(out);
            //Output properties
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty(OutputKeys.METHOD, "xml");
            transformer.transform(source, result); 
            return true;
         } catch(Exception ex){
            ex.printStackTrace();
            return false;
         }:wink: 
      }
    Pour le reste, je laisse les experts te répondre

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Merci déjà pour l'infos.
    Je teste cela tout de suite !

  4. #4
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Bon merci déjà !
    J'obtiens çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <publipostage>
    <coucou/>
    </publipostage>
    Donc çà indente bien les lignes , c'est génial, mais cela n'indente pas les tags, tu as une autre petite idée.
    En tout cas merci déjà pour l'encoding !!
    C'est super !

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Personne d'autre pour la DTD ?
    Mais tout le monde est en vacances ou quoi ?
    ;-)

  6. #6
    Membre habitué Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Points : 156
    Points
    156
    Par défaut
    Pour la DTD il me semble que ça n'est pas possible. Dans la javadoc on peut lire:
    DOM Level 3 doesn't support editing DocumentType nodes. DocumentType nodes are read-only.
    Par contre, une solution de contournement consiste à créer un document vide contenant la déclaration de la DTD. Ensuite lorsque tu veux créer ton DOM, tu charges ce document plutôt que de créer un DOM vide (le DOM contiendra donc la déclaration de la DTD) et tu ajoutes les noeuds souhaités.

  7. #7
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Ah oui !! il va garder la DTD en mémoire ...
    C'est cool çà merci.
    Je vais essayer .
    Par contre , je ne veux éditer que la ligne qui contient la DTD , pas la DTD elle même !!
    En tout cas merci pour l'info !

  8. #8
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par ZeKiD Voir le message
    Bon merci déjà !
    J'obtiens çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <publipostage>
    <coucou/>
    </publipostage>
    Donc çà indente bien les lignes , c'est génial, mais cela n'indente pas les tags, tu as une autre petite idée.
    En tout cas merci déjà pour l'encoding !!
    C'est super !

    Même question, est-il possible d'indenter les tags pour avoir un fichier qui ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <publipostage>
         <coucou/>
    </publipostage>
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

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

Discussions similaires

  1. [MOSS 2007] Création automatique fichier XML pour BDC
    Par frechy dans le forum SharePoint
    Réponses: 6
    Dernier message: 06/03/2009, 11h11
  2. [DOM] création de fichier XML avec PHP
    Par cortex007 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 09/12/2007, 11h31
  3. Erreur pendant création du fichier xml
    Par borgfabr dans le forum SQL
    Réponses: 1
    Dernier message: 17/11/2007, 09h08
  4. création de fichier xml : indentation du code généré
    Par DonKnacki dans le forum VBScript
    Réponses: 4
    Dernier message: 07/11/2007, 13h45
  5. [XSLT] Création de fichier XML dynamique avec PHP
    Par daninho dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 02/02/2006, 11h18

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