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 Discussion :

document XML - Creation


Sujet :

XML

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Par défaut document XML - Creation
    Bonjour,

    Je veux creer un document XML pour en deduire un message XML.

    J'utilise la methode xmlNewDoc de la libxml (qui a un parametre d'entrees correspondant a la version XML) pour creer le document et apres creation des noeuds j'aurrais par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0"?>
    <EXAMPLE prop1="gnome is great" prop2="&amp; linux too">
      <head>
       <title>Welcome to Gnome</title>
      </head>
      <chapter>
       <title>The Linux adventure</title>
       <p>bla bla bla ...</p>
       <image href="linus.gif"/>
       <p>...</p>
      </chapter>
    </EXAMPLE>
    Mais ce que je voulais avoir c'est juste ce qui est ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <EXAMPLE prop1="gnome is great" prop2="&amp; linux too">
      <head>
       <title>Welcome to Gnome</title>
      </head>
      <chapter>
       <title>The Linux adventure</title>
       <p>bla bla bla ...</p>
       <image href="linus.gif"/>
       <p>...</p>
      </chapter>
    </EXAMPLE>
    c.a.d sans la ligne suivant :
    <?xml version="1.0"?>
    Comment peut on faire pour creer le document ci dessus sans la ligne qui precise la version de XML ?

    Merci en avance

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Pourquoi donc voudrais tu supprimer cette ligne

    Finalement, elle a parfaitement sa place à cet endroit dans un document XML...alors, pourquoi l'en retirer
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    Pourquoi donc voudrais tu supprimer cette ligne

    Finalement, elle a parfaitement sa place à cet endroit dans un document XML...alors, pourquoi l'en retirer
    Parceque, je suis en train de creer un message XML qui contient une commande et qui sera envoyer au serveur qui interprete le message sans la ligne indiqué (<?xml version="1.0"?>
    !!!)

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Mais, à ce moment là, tu n'a absolument pas besoin de passer par un fichier...

    Du coup:
    1. Tu crées ton arborescence XML en "parsant" ta commande SQL (et en gardant la référence sur le premier noeud créé du fait du parsing)
    2. Tu intègre les noeuds créés par l'étape 1 dans une chaine de caractères
    3. Tu envoie la chaine au serveur...
    4. le tour est joué
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Mais, à ce moment là, tu n'a absolument pas besoin de passer par un fichier...

    Du coup:
    1. Tu crées ton arborescence XML en "parsant" ta commande SQL (et en gardant la référence sur le premier noeud créé du fait du parsing)
    2. Tu intègre les noeuds créés par l'étape 1 dans une chaine de caractères
    3. Tu envoie la chaine au serveur...
    4. le tour est joué
    En fait je n'ai pas trop compris ?

    Il me semble pour parser j'ai besoin d'in xmlDoc qui retourner par la fonction xmlNewDoc :
    Voila ce que j'essaye de faire :
    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
    127
    128
    129
    130
    131
    132
    133
    134
     
    #include <stdio.h>
    #include <libxml/parser.h>
    #include <libxml/tree.h>
     
    #if defined(LIBXML_TREE_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
     
    /*
     *To compile this file using gcc you can type
     *gcc `xml2-config --cflags --libs` -o tree2 tree2.c
     */
     
    /* A simple example how to create DOM. Libxml2 automagically
     * allocates the necessary amount of memory to it.
    */
    int
    main(int argc, char **argv)
    {
        xmlDocPtr doc = NULL;       /* document pointer */
        xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;/* node pointers */
        xmlDtdPtr dtd = NULL;       /* DTD pointer */
        char buff[256];
        int i, j;
        xmlChar* xmlbuff /*=(xmlChar*)"<PremiereConferncinf></PremiereConferencing>"*/ ;
        int buffersize = 0;
     
        LIBXML_TEST_VERSION;
     
        /*
         * Creates a new document, a node and set it as a root node
         */
         doc = xmlNewDoc(BAD_CAST "1.0");
        //doc = xmlNewDoc(NULL);
        //doc = xmlParseMemory((const char*)xmlbuff,buffersize);
        root_node = xmlNewNode(NULL, BAD_CAST "root");
        //xmlDocSetRootElement(doc, root_node);
    	//xmlAddChild(NULL, root_node);
        root_node = xmlDocGetRootElement(doc);
        if (root_node == NULL) {
            fprintf(stderr, "Document XML vierge\n");
            xmlFreeDoc(doc);
            return EXIT_FAILURE;
        }
        printf("La racine du document est : %s\n", root_node->name);
     
     
        /*
         * Creates a DTD declaration. Isn't mandatory.
         */
        //dtd = xmlCreateIntSubset(doc, BAD_CAST "root", NULL, BAD_CAST "tree2.dtd");
     
        /*
         * xmlNewChild() creates a new node, which is "attached" as child node
         * of root_node node.
         */
        xmlNewChild(root_node, NULL, BAD_CAST "node1",
                    BAD_CAST "content of node 1");
        /*
         * The same as above, but the new child node doesn't have a content
         */
        xmlNewChild(root_node, NULL, BAD_CAST "node2", NULL);
     
        /*
         * xmlNewProp() creates attributes, which is "attached" to an node.
         * It returns xmlAttrPtr, which isn't used here.
         */
        node =
            xmlNewChild(root_node, NULL, BAD_CAST "node3",
                        BAD_CAST "this node has attributes");
        xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");
        xmlNewProp(node, BAD_CAST "foo", BAD_CAST "bar");
     
        /*
         * Here goes another way to create nodes. xmlNewNode() and xmlNewText
         * creates a node and a text node separately. They are "attached"
         * by xmlAddChild()
         */
        node = xmlNewNode(NULL, BAD_CAST "node4");
        node1 = xmlNewText(BAD_CAST
                       "other way to create content (which is also a node)");
        xmlAddChild(node, node1);
        xmlAddChild(root_node, node);
     
        /*
         * A simple loop that "automates" nodes creation
         */
        for (i = 5; i < 7; i++) {
            sprintf(buff, "node%d", i);
            node = xmlNewChild(root_node, NULL, BAD_CAST buff, NULL);
            for (j = 1; j < 4; j++) {
                sprintf(buff, "node%d%d", i, j);
                node1 = xmlNewChild(node, NULL, BAD_CAST buff, NULL);
                xmlNewProp(node1, BAD_CAST "odd", BAD_CAST((j % 2) ? "no" : "yes"));
            }
        }
     
        /*
         * Dumping document to stdio or file
         */
        xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);
     
     
        /*
         * Dump the document to a buffer and print it
         * for demonstration purposes.
         */
        xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1);
        printf((char *) xmlbuff);
     
     
     
        /*free the document */
       xmlFree(xmlbuff);
     
        xmlFreeDoc(doc);
     
        /*
         *Free the global variables that may
         *have been allocated by the parser.
         */
        xmlCleanupParser();
     
        /*
         * this is to debug memory for regression tests
         */
        xmlMemoryDump();
        return(0);
    }
    #else
    int main(void) {
        fprintf(stderr, "tree support not compiled in\n");
        exit(1);
    }
    #endif

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Le code que tu propose est un code tout à fait complet, dont il s'agit de ne prendre que ce qui t'intéresse

    Ici, ce qui t'intéresse, c'est de créer tes noeuds... donc xmlNewNode, xmlNewChild, et xmlNewProp sont susceptible de t'intéresser...

    Par contre, tu n'a pas besoin de créer un fichier, et donc, tu peux passer outre de tout ce qui est xmlNewDoc, et de tout ce qui a trait, en gros, à la variable doc

    Ce qu'il te manque, c'est:
    • La récupération de la taille du buffer
    • La transformation de tout l'arbre sous forme de chaines

    Mais, l'un dans l'autre, tu devrais pouvoir t'en sortir avec les différentes fonctions déclarées dans le fichier xmlstring.h (xmlStrlen et xmlStrndup entre autres).

    Une fois que tu aura construit ta propre chaîne de caractères contenant les noeuds qui t'intéressent, il te "suffira" de la passer au serveur qui doit la gérer
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. creation d'un document xml (dublin core et jsp)
    Par fruwen7 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 05/07/2012, 18h35
  2. recherche dans un document xml via DOM
    Par ndoye_zaff dans le forum APIs
    Réponses: 5
    Dernier message: 11/06/2003, 14h44
  3. Réponses: 3
    Dernier message: 03/06/2003, 13h16
  4. Stocker du texte mis en forme dans un document XML
    Par ovh dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 13/02/2003, 10h23
  5. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53

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