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

VC++ .NET Discussion :

Création d'une appli pour fichiers XML


Sujet :

VC++ .NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Création d'une appli pour fichiers XML
    Bonjour à tous,

    J'aimerai créer une petite application en utilisant Visual C++ 2010 Express, malheureusement je rencontre d'énormes difficultés car je ne suis pas du tout un programmeur c'est pourquoi votre aide me sera d'une grande utilité.

    Explication du problème: J'utilise un logiciel graphique me permettant de saisir des schémas et qui les enregistre au format XML.

    Exemple d'un fichier XML généré par le logiciel :
    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
    <?xml version="1.0" encoding="utf-8"?>
    <project xmlns="http://www.plcopen.org/xml/tc6.xsd" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <fileHeader companyName="Universita di Napoli Federico II" companyURL="www.unina.it" productName="UniSim" productVersion="0.5.0" productRelease="B" creationDateTime="2007-12-31T23:59:59Z" contentDescription="Application" />
      <contentHeader name="Test2" version="1" organization="TIMA" author="Micka">
        <Comment />
        <coordinateInfo>
          <pageSize x="0" y="0" />
          <fbd>
            <scaling x="1" y="1" />
          </fbd>
          <ld>
            <scaling x="1" y="1" />
          </ld>
          <sfc>
            <scaling x="1" y="1" />
          </sfc>
        </coordinateInfo>
      </contentHeader>
      <types>
        <dataTypes />
        <pous>
          <pou name="Grafcet" pouType="program">
            <interface>
              <localVars name="Grafcet - Local variables">
                <variable name="a">
                  <type>
                    <BOOL />
                  </type>
                  <initialValue>
                    <simpleValue value="True" />
                  </initialValue>
                </variable>
                <variable name="b">
                  <type>
                    <BOOL />
                  </type>
                  <initialValue>
                    <simpleValue value="False" />
                  </initialValue>
                </variable>
              </localVars>
              <tempVars name="Grafcet - Temporary variables" />
              <inputVars name="Grafcet - Input variables" />
              <outputVars name="Grafcet - Output variables" />
              <inOutVars name="Grafcet - InOut variables" />
              <externalVars name="Grafcet - External variables" />
              <accessVars name="Grafcet - Accessible variables" />
              <globalVars name="Grafcet - Global variables" />
            </interface>
            <body>
              <SFC>
                <step name="S0" height="44" width="44" localId="1" initialStep="true" negated="false">
                  <position x="350" y="66" />
                  <connectionPointIn>
                    <connection refLocalId="8" />
                  </connectionPointIn>
                </step>
                <step name="S1" height="44" width="44" localId="2" initialStep="false" negated="false">
                  <position x="350" y="146" />
                  <connectionPointIn>
                    <connection refLocalId="5" />
                  </connectionPointIn>
                </step>
                <step name="S2" height="44" width="44" localId="3" initialStep="false" negated="false">
                  <position x="350" y="238" />
                  <connectionPointIn>
                    <connection refLocalId="6" />
                  </connectionPointIn>
                </step>
                <step name="S3" height="44" width="44" localId="4" initialStep="false" negated="false">
                  <position x="350" y="322" />
                  <connectionPointIn>
                    <connection refLocalId="7" />
                  </connectionPointIn>
                </step>
                <transition height="44" width="44" localId="5">
                  <position x="368" y="128" />
                  <connectionPointIn>
                    <connection refLocalId="1" />
                  </connectionPointIn>
                  <condition>
                    <reference name="a" />
                  </condition>
                </transition>
                <transition height="44" width="44" localId="6">
                  <position x="368" y="216" />
                  <connectionPointIn>
                    <connection refLocalId="2" />
                  </connectionPointIn>
                  <condition>
                    <reference name="a" />
                  </condition>
                </transition>
                <transition height="44" width="44" localId="7">
                  <position x="368" y="304" />
                  <connectionPointIn>
                    <connection refLocalId="3" />
                  </connectionPointIn>
                  <condition>
                    <reference name="b" />
                  </condition>
                </transition>
                <transition height="44" width="44" localId="8">
                  <position x="300" y="216" />
                  <connectionPointIn>
                    <connection refLocalId="4" />
                  </connectionPointIn>
                  <condition>
                    <reference name="a" />
                  </condition>
                </transition>
              </SFC>
            </body>
          </pou>
        </pous>
      </types>
      <instances>
        <configurations>
          <configuration name="MainConfiguration">
            <resource name="MainResource">
              <pouInstance name="Grafcet" type="program" />
            </resource>
          </configuration>
        </configurations>
      </instances>
    </project>
    Dans ce fichier XML, seulement quelques informations m'intéressent, ce sont les steps et les transitions, elles se situent juste après la balise <SFC> (entre la ligne 51 et 112 du code ci-dessus).

    Les informations que j'aimerai donc récupérer sont:

    - Premièrement : le nombre total de STEP et de TRANSITION (ce nombre peut varier d'un fichier xml à un autre)

    - Deuxièmement :
    * Pour chaque STEP, le "name" (string), le "localID" (int), le "refLocalId" (int) et enfin le "InitialStep" (bool).
    * Pour chaque TRANSITION, le "name" (string), le "localID" (int) et le "refLocalId" (int).

    Après avoir vu le fichier XML, voici les fonctions de mon application que j'aimerai créer :

    1. Ouvrir un fichier .xml quelque soit son nom (car chaque fichier généré auparavant aura un nom différent)
    2. Récupérer les informations dont j'ai besoin comme expliqué un peu plus haut
    3. Traiter ces informations afin d'obtenir une matrice, mais pour l'instant cette partie n'est pas la priorité.


    J'aimerai procéder étape par étape afin de bien tout comprendre et donc pour commencer, comment ouvrir un fichier .XML quelque soit son nom ?

    J'ai vu que cette fonction pouvait surement convenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public: Workbook^ OpenXML(
    	String^ Filename, 
    	Object^ Stylesheets, 
    	Object^ LoadOption
    );
    Mais comment lier cette fonction à un bouton du style "menu" -> "ouvrir un fichier" -> "parcourir" ?

    De plus, pour récupérer les informations dont j'ai besoin j'avais pensé à quelque chose du genre :
    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
    class step{
    	public:
    		string name;
    		bool initialStep, negated;
    		int localId, refLocalId;
    };
     
    class transition{
    	public:
    		int localId, refLocalId;
    };
     
    list<step> step_list;
    list<transition> transition_list;
     
    TiXmlHandle hdl(&doc);
    TiXmlElement *elem = hdl.FirstChildElement().FirstChildElement().FirstChildElement().FirstChildElement().FirstChildElement().Element();
     
     
    step cl;
    if(!elem){
    	cerr << "le noeud à atteindre n'existe pas" << endl;
    	return 2;
    }
     
    while (elem){
    	cl.name = elem->Attribute("name");
    	cl.pass = elem->Attribute("initialStep");
    	cl.pass = elem->Attribute("negated");
    	elem->QueryIntAttribute("localId", &cl.droits);
    	elem->QueryIntAttribute("refLocalId", &cl.droits);
    	step_list.push_back(cl);
     
    	elem = elem->NextSiblingElement(); // iteration 
    }
     
    transition cl;
    if(!elem){
    	cerr << "le noeud à atteindre n'existe pas" << endl;
    	return 2;
    }
     
    while (elem){
    	elem->QueryIntAttribute("localId", &cl.droits);
    	elem->QueryIntAttribute("refLocalId", &cl.droits);
    	transition_list.push_back(cl);
     
    	elem = elem->NextSiblingElement(); // iteration 
    }
     
    list<step>::iterator i;
    for(i=step_list.begin(); i!=step_list.end(); i++)
        cout << i->name << " " << i->initialStep << " " << i->negated << " " << i->localId << " " << i->refLocalId << endl;
     
    list<transition>::iterator i;
    for(i=transition_list.begin(); i!=transition_list.end(); i++)
        cout << i->localId << " " << i->refLocalId << endl;
     
     
    	{
    Mais je doute que ça marche, et de plus je ne sais pas où y placer dans mon projet. Fichier.ccp ? Fichier.h ? Dans le main ?

    Conclusion : I'm Lost et je pense que ce sujet pourra intéresser pas mal de personnes car j'ai fait de très nombreuses recherches et je n'ai jamais trouvé quelque chose de clair mis à part m'embarquer dans d’innombrables tuto (tinyXML, xPath, Xerces etc...).

    Merci d'avoir pris le temps de lire ce sujet, j'attend avec impatience vos commentaires, vos conseils et bien entendu votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Tu peux utiliser une OpenFileDialog pour avoir le "parcourir".

    Pour le XML, j'ignore si la version Express peut faire ça, mais Visual est capable d'extraire un schéma qui peut ensuite être utilisé pour générer du code de désérialisation XML.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Cherche assistance pour création d'une appli mobile
    Par mavy77 dans le forum Mobiles
    Réponses: 1
    Dernier message: 25/11/2013, 18h51
  2. Réponses: 4
    Dernier message: 01/03/2012, 19h50
  3. Réponses: 2
    Dernier message: 29/02/2012, 15h20
  4. Création d'une macro pour générer un xml depuis excel
    Par vieri dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/12/2011, 09h46
  5. Réponses: 3
    Dernier message: 23/07/2009, 11h44

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