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

XML/XSL et SOAP Discussion :

Génération d'un format précis du fichier XML


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 90
    Par défaut Génération d'un format précis du fichier XML
    Bonjour,

    je voudrais créer un fichier XML avec un Java.
    je suis arriver à faire ce fichier 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <graphml>
      <key1 key1="x" />
      <key2 key2="y" />
      <key3 key3="name" />
      <graph1>
        <Node1>
          <X>40</X>
          <Y>50</Y>
          <Name>MASG</Name>
        </Node1>
        <Node2>
          <X>30</X>
          <Y>40</Y>
          <Name>MASG</Name>
        </Node2>
        <edge>
          <target>n1</target>
          <source>n2</source>
          <Name>FH</Name>
        </edge>
      </graph1>
    </graphml>
    avec le code java suivant :

    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
     
    import java.sql.SQLException;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.output.XMLOutputter;
    import org.jdom.output.Format;
     
    import java.io.FileWriter;
    import java.io.IOException;
    import java.sql.Connection;
     
     
    public class test {
     
     
    //        public Element setChild (Connection conn, int ID_Child) throws NotFoundException, SQLException{
    //
    //
    //        Graphic_positionDao graphic_position_X_dao = new Graphic_positionDao();
    //        Graphic_positionDao graphic_position_Y_dao = new Graphic_positionDao();
    //        Graphic_positionDao graphic_position_ID_MASG_dao = new Graphic_positionDao();
    //        String x = graphic_position_X_dao.getObject(conn, ID_Child).getX_MASG_CSG();
    //        String y = graphic_position_Y_dao.getObject(conn, ID_Child).getX_MASG_CSG();
    //        String ID_MASG = graphic_position_ID_MASG_dao.getObject(conn, ID_Child).getID_MASG_CSG();
    //        Element child = new Element(ID_MASG);
    //        child.addContent(new Element("X").setText(x));
    //        child.addContent(new Element("Y").setText(y));
    //        return child;
    //        }
     
        public static void main(String[] args)  {
           //
            // <rows>
            //     <row>
            //         <firstname>Alice</firstname>
            //         <lastname>Starbuzz</lastname>
            //         <address>Sunset Read</address>
            //     </row>
            // </row>
            //
     
     
     
               //     Port_typeDao port_type_dao = new Port_typeDao();
     
     
     
            Document document = new Document();
            Element root = new Element("graphml");
     
            Element key1 = new Element("key1");
            Element key2 = new Element("key2");
            Element key3 = new Element("key3");
     
            Element child1 = new Element("graph1");
     
     
            //
            // Creating a child for the root element. Here we can see how to
            // set the text of an xml element.
            //
            key1.setAttribute("key1", "x");
            key2.setAttribute("key2", "y");
            key3.setAttribute("key3", "name");
     
         //   key1.addContent(null);
     
            Element child2 = new Element("Node1");
     
            child2.addContent(new Element("X").setText("40"));
            child2.addContent(new Element("Y").setText("50"));
            child2.addContent(new Element("Name").setText("MASG"));
     
            Element child3 = new Element("Node2");
            //child3.setAttribute("key", "y");
            child3.addContent(new Element("X").setText("30"));
            child3.addContent(new Element("Y").setText("40"));
            child3.addContent(new Element("Name").setText("MASG"));
     
            Element child4 = new Element("edge");
            //child4.setAttribute("key", "name");
            child4.addContent(new Element("target").setText("n1"));
            child4.addContent(new Element("source").setText("n2"));
            child4.addContent(new Element("Name").setText("FH"));
     
     
            //
            // Add the child to the root element and add the root element as
            // the document content.
            //
     
            root.setContent(key1);
            root.addContent(key2);
            root.addContent(key3);
            root.addContent(child1);
     
     
            child1.addContent(child2);
            child1.addContent(child3);
            child1.addContent(child4);
     
            document.setContent(root);
     
            try {
                FileWriter writer = new FileWriter("Graph2.xml");
                XMLOutputter outputter = new XMLOutputter();
     
                //
                // Set the XLMOutputter to pretty formatter. This formatter
                // use the TextMode.TRIM, which mean it will remove the
                // trailing white-spaces of both side (left and right)
                //
                outputter.setFormat(Format.getPrettyFormat());
     
                //
                // Write the document to a file and also display it on the
                // screen through System.out.
                //
                outputter.output(document, writer);
                outputter.output(document, System.out);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    mais je voudrais que la structure de mon ficheir XML généré soit différente, en l'occurence comme 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml">
    <key id="name" for="node">
    <default></default>
    </key>
    <key id="y" for="node">
    <default>0</default>
    </key>
    <key id="x" for="node">
    <default>0</default>
    </key>
    <key id="name" for="edge">
    <default></default>
    </key>
    <graph edgedefault="directed">
    <node id="M23">
    <data key="name">M23</data>
    <data key="y">154.0</data>
    <data key="x">34.0</data>
    </node>
    <node id="M1">
    <data key="name">M1</data>
    <data key="y">37.0</data>
    <data key="x">175.0</data>
    </node>
    <node id="node5">
    <data key="name">node5</data>
    <data key="y">20.0</data>
    <data key="x">36.0</data>
    </node>
    <edge source="node5" target="M1"/>
    <edge source="node5" target="M23"/>
    <edge source="M23" target="M1">
    <data key="name">N0</data>
    </edge>
    </graph>
    </graphml>
    que doit je changer et que dois je ajouter ?!!!

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    #1 - La première différence, c'est que tous tes éléments doivent être dans le namespace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://graphml.graphdrawing.org/xmlns/graphml
    Il faut donc les créer comme tels.

    Créer une instance JDOM du namespace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pas de préfixe : utilisable comme namespace par défaut.
    public static final Namespace GRAPH_NS = Namespace.getNamespace("http://graphml.graphdrawing.org/xmlns/graphml");
    Créer tous les éléments dans ce namespace. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Crée un élément dans un namespace
    Element root = new Element("graphml", GRAPH_NS);
    #2 - Ajouter Il suffit d'ajouter à la racine l'attribut schemaLocation avec le bon namespace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    final Namespace XSI_NS = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
     
    root.setAttribute(
      "schemaLocation",
      "http://graphml.graphdrawing.org/xmlns/graphml",
      XSI_NS);
    #3 - Remarque annexe :

    Ce n'est pas comme ça qu'on utilise schemaLocation. Au mieux c'est comme s'il n'était pas là, et en général cela va planter les validateurs automatiques.
    schemaLocation doit contenir une URI de namespace suivi de l'URI d'un schéma XSD validant ce namespace.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 90
    Par défaut
    Citation Envoyé par thelvin Voir le message
    #1 - La première différence, c'est que tous tes éléments doivent être dans le namespace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://graphml.graphdrawing.org/xmlns/graphml
    Il faut donc les créer comme tels.

    Créer une instance JDOM du namespace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pas de préfixe : utilisable comme namespace par défaut.
    public static final Namespace GRAPH_NS = Namespace.getNamespace("http://graphml.graphdrawing.org/xmlns/graphml");
    Créer tous les éléments dans ce namespace. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Crée un élément dans un namespace
    Element root = new Element("graphml", GRAPH_NS);
    cela marche très bien, seulement, le préfixe par défaut "xmlns" se trouve aussi dans tous les child directs de root et ceci me cause un problème. voici ce que je veux dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     <key xmlns="" id="x" for="node">
        <default>0</default>
      </key>
    Citation Envoyé par thelvin Voir le message
    #2 - Ajouter Il suffit d'ajouter à la racine l'attribut schemaLocation avec le bon namespace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    final Namespace XSI_NS = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
     
    root.setAttribute(
      "schemaLocation",
      "http://graphml.graphdrawing.org/xmlns/graphml",
      XSI_NS);
    cela marche très bien, merci.

    Citation Envoyé par thelvin Voir le message
    #3 - Remarque annexe :

    Ce n'est pas comme ça qu'on utilise schemaLocation. Au mieux c'est comme s'il n'était pas là, et en général cela va planter les validateurs automatiques.
    schemaLocation doit contenir une URI de namespace suivi de l'URI d'un schéma XSD validant ce namespace.
    j'ai pas bien saisi la remarque.

    voici le fichier XML que j'obtiens après les modifications que tu m'as conseillé :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml">
      <key xmlns="" id="x" for="node">
        <default>0</default>
      </key>
      <key xmlns="" id="y" for="node">
        <default>0</default>
      </key>
      <key xmlns="" id="name" for="node">
        <default />
      </key>
      <graph xmlns="" edgedefault="directed">
        <Node id="M23">
          <data key="name">M23</data>
          <data key="y">20</data>
          <data key="x">20</data>
        </Node>
        <Node id="M1">
          <data key="name">M1</data>
          <data key="y">30</data>
          <data key="x">30</data>
        </Node>
        <egde source="Node" target="M1" />
        <egde source="Node" target="M23" />
        <edge source="M23" target="M1">
          <data key="name">N0</data>
        </edge>
      </graph>
    </graphml>

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Citation Envoyé par ROUGE87 Voir le message
    cela marche très bien, seulement, le préfixe par défaut "xmlns" se trouve aussi dans tous les child directs de root et ceci me cause un problème. voici ce que je veux dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     <key xmlns="" id="x" for="node">
        <default>0</default>
      </key>
    - "préfixe par défaut" ça n'existe pas.
    - définit le namespace par défaut. enlève le namespace par défaut.
    - J'ai dit qu'il fallait créer tous les éléments comme ça. Crée tous les éléments comme ça.

    j'ai pas bien saisi la remarque.
    Je t'ai indiqué comment créer l'attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml"
    tel que tu l'as demandé.
    Ce que je dis, c'est qu'il ne fallait pas le demander comme ça : au mieux il n'a aucun sens, au pire il ne marche pas et plante le validateur.

    Ça devrait être quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://graphml.graphdrawing.org/xmlns/1.0/graphml-structure.xsd"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 90
    Par défaut
    Citation Envoyé par thelvin Voir le message
    - "préfixe par défaut" ça n'existe pas.
    - définit le namespace par défaut. enlève le namespace par défaut.
    - J'ai dit qu'il fallait créer tous les éléments comme ça. Crée tous les éléments comme ça.
    En fait, le fait d'écrire ces deux lignes de code induit à ce que tous les child direct du root aient un attribut xmlns. chose que je devrais éviter.
    voici les deux lignes de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static final Namespace GRAPH_NS = Namespace.getNamespace("http://graphml.graphdrawing.org/xmlns/graphml");
     
    Element root = new Element("graphml", GRAPH_NS);
    et cela induit à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      <key xmlns="" id="y" for="node">
        <default>0</default>
      </key>
    comment faire pour éviter ce nouvel attribut ?!

    Citation Envoyé par thelvin Voir le message
    Je t'ai indiqué comment créer l'attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml"
    tel que tu l'as demandé.
    oui, je l'ai essayé et ca marche très bien. Merci.
    Citation Envoyé par thelvin Voir le message
    Ça devrait être quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://graphml.graphdrawing.org/xmlns/1.0/graphml-structure.xsd"
    En fait, je suis entrain de vouloir générer ce fichier XML avec ce format bien précis que j'ai cité dans le premier post car je suis entrain d'utiliser JUNG qui demande précisément ce format là. Merci.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Citation Envoyé par ROUGE87 Voir le message
    comment faire pour éviter ce nouvel attribut ?!
    Comme je l'ai déjà dit deux fois, tu dois créer tous tes éléments de la même manière que tu crées la racine.
    Explication : si tu ne mets pas tes éléments dans le namespace par défaut, le namespace par défaut sera retiré, bien sûr.

    Citation Envoyé par ROUGE87 Voir le message
    En fait, je suis entrain de vouloir générer ce fichier XML avec ce format bien précis que j'ai cité dans le premier post car je suis entrain d'utiliser JUNG qui demande précisément ce format là. Merci.
    Tu dois sûrement te tromper. JUNG doit certainement préférer le tel que je te l'ai indiqué moi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [XML] Génération fichier XML pour RSS via PHP, problème lors de l'écriture
    Par gator dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 04/02/2012, 18h17
  2. pb de génération de fichier xml
    Par peppena dans le forum Langage
    Réponses: 5
    Dernier message: 03/07/2006, 09h56
  3. Format décimal dans les fichiers XML
    Par wozzz dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 31/05/2006, 09h18
  4. [DOM] Génération dynamique fichier xml
    Par Fabouney dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 03/10/2005, 09h45

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