Insérer la valeur d'une variable entre deux balise XML.

Résolu
2eio Messages postés 5 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 14 mai 2009 - 13 mai 2009 à 17:01
2eio Messages postés 5 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 14 mai 2009 - 14 mai 2009 à 08:24
Bonjour.

J'ai créé un programme en Langage C, qui crée un fichier XML avec sa DTD, sous Paradigm C++.

Mon problème est que je n'arrive pas à y inclure la valeur de ma variable cmd_0200 entre les deux balises <REGISTRATION>.

J'ai essayée pas de mal de chose, mais la je ne sais plus quoi faire.

Pouvez-vous m'aider, merci à tous.

Voici mon code de l'essai avec <!NOTIFICATION

/*
// introduire variable dans le fichier XML
*/

#include        <stdio.h>
#include        <string.h>
#include        <stdlib.h>
#include        <dirent.h>
#include        <dir.h>

FILE *create_file_xml = NULL;
FILE *create_file_dtd = NULL;

char page_dtd[5000];
char page_xml[5000];

char plaque[]={"9854 VZ 19"};

char carburant[]={"GO"};
char path_dir[25];
char path_xml[40];
char path_dtd[40];

char cmd_0200[]={"9854 VZ 19"};

void main(void)
{
   if((strncmp(carburant,"ES",2)==0)  ||  (strncmp(carburant,"GL",2)==0))
   {
      strcpy(path_dir,"\");
      strcat(path_dir,carburant);
      mkdir(path_dir);
      strcat(path_dir,"\");
      strcpy(path_xml,path_dir);
      strcat(path_xml,plaque);
      strcat(path_xml,".xml");
      strcpy(path_dtd,path_dir);
      strcat(path_dtd,"ES_GL.dtd");
        if ((create_file_xml fopen ( path_xml,"a")) NULL)
       {
           fprintf(stderr,"Fichier inexistant.\n");
       }
       else
       {
          strcpy(page_xml,"<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>\n"
                                    "<!DOCTYPE VEHICULE SYSTEM "ES_GL.dtd">\n"
                                    "\t<RESULTS VERSION="1.0">\n"
                                    "\t\t<RESULTSHEADER>\n"
                                    "\t\t\t<VEHICULE>\n"
                                    "\t\t\t\t\n"
                                    "\t\t\t\t\t<REGISTRATION>cmd_0200</REGISTRATION>\n"
                                    "\t\t\t\t\t<FUEL1>ESS</FUEL1>\n"
                                    "\t\t\t\t\n"
                                    "\t\t\t</VEHICULE>\n"
                                    "\t\t</RESULTSHEADER>\n"
                                    "\t</RESULTS>\n");
           fprintf(create_file_xml,"%s",page_xml);
       }
       fclose(create_file_xml);
      if ((create_file_dtd fopen ( path_dtd,"w")) NULL)
      {
          fprintf(stderr,"Fichier inexistant.\n");
      }
      else
      {
         strcpy(page_dtd,"<!ELEMENT RESULTS (RESULTSHEADER, RESULT+)>\n"
                                   "\n"
                                   "<!ATTLIST RESULTS\n "
                                   "                  VERSION CDATA "1.0"\n"
                                   ">\n"
                                   "\n"
                                   "<!ELEMENT RESULTSHEADER (VEHICLE)>\n"
                                   "\n"
                                   "<!ELEMENT RESULT (TITLE, HEADER, SECTION+)>\n"
                                   "\n"
                                   "<!ATTLIST RESULT\n"
                                   "                         OBJECT (EMISSION) #REQUIRED\n"
                                   "                 METHOD (SMOKE | SMOKE_TURBO | SMOKE_OBD) #REQUIRED\n"
                                   ">\n"
                                   "\n"
                                   "<!ELEMENT VEHICLE (IDENT)>\n"
                                   "\n"
                                   "<!ELEMENT REGISTRATION (#PCDATA)>\n"
                                   "\n"
                                   "<!ELEMENT FUEL1 (#PCDATA)>\n"
                                   "\n"
                                   "<!NOTATION TXT SYSTEM "Texte">\n"
                                  "\n"
                                  "<!ENTITY cmd_0200 SYSTEM "Texte" NDATA TXT>\n");
         fprintf(create_file_dtd,"%s",page_dtd);
      }
      fclose(create_file_dtd);
   } // fin de if strncmp(carburant ESS...)

   else if(strncmp(carburant,"GO",2)==0)
   {
       strcpy(path_dir,"\");
       strcat(path_dir,carburant);
      mkdir(path_dir);
      strcat(path_dir,"\");
      strcpy(path_xml,path_dir);
      strcat(path_xml,plaque);
      strcat(path_xml,".xml");
      strcpy(path_dtd,path_dir);
      strcat(path_dtd,"GO.dtd");
        if ((create_file_xml fopen ( path_xml,"a")) NULL)
       {
           fprintf(stderr,"Fichier inexistant.\n");
       }
       else
       {
          strcpy(page_xml, "<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>\n"
                                     "<!DOCTYPE VEHICULE SYSTEM "GO.dtd">\n"
                                     "\t<RESULTS VERSION="1.0">\n"
                                     "\t\t<RESULTSHEADER>\n"
                                     "\t\t\t<VEHICULE>\n"
                                     "\t\t\t\t\n"
                                     "\t\t\t\t\t<REGISTRATION>cmd_0200</REGISTRATION>\n"
                                     "\t\t\t\t\t<FUEL1>GO</FUEL1>\n"
                                     "\t\t\t\t\n"
                                     "\t\t\t</VEHICULE>\n"
                                     "\t\t</RESULTSHEADER>\n"
                                     "\t</RESULTS>\n");

         fprintf(create_file_xml,"%s",page_xml);
      }      if ((create_file_dtd fopen ( path_dtd,"w")) NULL)
      {
          fprintf(stderr,"Fichier inexistant.\n");
      }
      else
      {
         strcpy(page_dtd,"<!ELEMENT RESULTS (RESULTSHEADER, RESULT+)>\n"
                                   "\n"
                                   "<!ATTLIST RESULTS\n "
                                   "                  VERSION CDATA "1.0"\n"
                                   ">\n"
                                   "\n"
                                   "<!ELEMENT RESULTSHEADER (VEHICLE)>\n"
                                   "\n"
                                   "<!ELEMENT RESULT (TITLE, HEADER, SECTION+)>\n"
                                   "\n"
                                   "<!ATTLIST RESULT\n"
                                   "                         OBJECT (EMISSION) #REQUIRED\n"
                                   "                 METHOD (SMOKE | SMOKE_TURBO | SMOKE_OBD) #REQUIRED\n"
                                   ">\n"
                                   "\n"
                                   "<!ELEMENT VEHICLE (IDENT)>\n"
                                   "\n"
                                   "<!ELEMENT REGISTRATION (#PCDATA)>\n"
                                   "\n"
                                   "<!ELEMENT FUEL1 (#PCDATA)>\n"
                                   "\n"
                                   "<!NOTATION TXT SYSTEM "Texte">\n"
                                   "\n"
                                   "<!ENTITY cmd_0200 SYSTEM "Texte" NDATA TXT>\n");
         fprintf(create_file_dtd,"%s",page_dtd);
      }
      fclose(create_file_dtd);
   } // fin else if
   else
   {
   printf("Type de carburant non conforme au gietnet(ES ou GO ou GL).\n");
   }
}

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 mai 2009 à 19:05
Oups, petit problème de copier coller lors de l'envoie...
Voici ce que je voulais écrire:

      strcpy(page_xml,"<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>\n"
         "<!DOCTYPE VEHICULE SYSTEM "ES_GL.dtd">\n"
         "\t<RESULTS VERSION="1.0">\n"
         "\t\t<RESULTSHEADER>\n"
         "\t\t\t<VEHICULE>\n"
         "\t\t\t\t\n"
         "\t\t\t\t\t<REGISTRATION>");
      strcat(page_xml, cmd_0200);
      strcat(page_xml,"</REGISTRATION>\n"
         "\t\t\t\t\t<FUEL1>ESS</FUEL1>\n"
         "\t\t\t\t\n"
         "\t\t\t</VEHICULE>\n"
         "\t\t</RESULTSHEADER>\n"
         "\t</RESULTS>\n");
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 mai 2009 à 19:04
Tu ne dois pas mettre le nom de ta variable entre guillemets, sinon c'est considéré comme la chaîne de texte "cmd_0200".

Une solution:
strcpy(page_xml,"<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>\n"
                                    "<!DOCTYPE VEHICULE SYSTEM "ES_GL.dtd">\n"
                                    "\t<RESULTS VERSION="1.0">\n"
                                    "\t\t<RESULTSHEADER>\n"
                                    "\t\t\t<VEHICULE>\n"
                                    "\t\t\t\t\n"
                                    "\t\t\t\t\t<REGISTRATIstrcpy(page_xml,"<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>\n"
                                    "<!DOCTYPE VEHICULE SYSTEM "ES_GL.dtd">\n"
                                    "\t<RESULTS VERSION="1.0">\n"
                                    "\t\t<RESULTSHEADER>\n"
                                    "\t\t\t<VEHICULE>\n"
                                    "\t\t\t\t\n"
                                    "\t\t\t\t\t<REGISTRATION>cmd_0200</REGISTRATION>\n"
                                    "\t\t\t\t\t<FUEL1>ESS</FUEL1>\n"
                                    "\t\t\t\t\n"
                                    "\t\t\t</VEHICULE>\n"
                                    "\t\t</RESULTSHEADER>\n"
                                    "\t</RESULTS>\n");ON>");
                                    strcat(page_xml, cmd_0200);
                                    strcat(page_xml, "</REGISTRATION>\n"
                                    "\t\t\t\t\t<FUEL1>ESS</FUEL1>\n"
                                    "\t\t\t\t\n"
                                    "\t\t\t</VEHICULE>\n"
                                    "\t\t</RESULTSHEADER>\n"
                                    "\t</RESULTS>\n");

On peut aussi le faire à coup de sprintf.
0
2eio Messages postés 5 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 14 mai 2009
14 mai 2009 à 08:24
J'avais écris ma variable entre guillemets car je pensais pouvoir utiliser la DTD pour lui donner sa valeur.
Mais apparemment on ne peut pas....

Merci beaucoup pour ton aide CptPingu, le strcat passe niquel.
0
Rejoignez-nous