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

C++Builder Discussion :

Cr�er et lire un fichier xml [Non suivi]


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par d�faut Cr�er et lire un fichier xml
    Salut !

    Je serais vraiment tr�s reconnaissant si quelqu'un pouvait m'aider ou me donner la solution pour cr�er un fichier XML et de le lire pour r�cup�rer des infos.
    J'ai pas tr�s bien compris la m�thode AddChild et dans quel cas je dois l'utiliser.

    Bon, je vous en remercie par avance.

    A la prochaine.

  2. #2
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    Lecture d'un fichier XML cela suppose que tu as pos� un TXMLDocument sur ta fiche.

    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
     
       // Récupérer le contenu d'un fichier XML
       DocumentXML->LoadFromFile(CheminFichier);
     
       // Récupérer la racine du document
       _di_IXMLNode Racine = DocumentXML->DocumentElement;
     
       // Récupérer le nom d'un noeud (ici le nom de la racine)
       Nom = Racine->GetNodeName();
     
       // Récupérer un noeud fils de la racine
       // Pour un noeud fils d'un autre noeud, appel ChildNodes->FindNode
       // du noeud.
       _di_IXMLNode Noeud = Racine->ChildNodes->FindNode("Noeud1");
     
       // Balayer tous les noeuds fils d'un noeud
       // Ce qui suppose de connaitre le nombre de sous noeud d'un noeud
       int Nb = Noeud->ChildNodes->GetCount()
     
       // On récupère le premier sous noeud
       _di_IXMLNode SSNoeud = Noeud->ChildNodes->First();
     
       // Passer au sous-noeud suivant
       SSNoeud = SSNoeud->NextSibling();
     
       // Récupérer la valeur d'un attribut d'un noeud
       Valeur = Noeud->GetAttribute("Attribut1");

    Cr�ation d'un document

    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
     
       // Activer le document avant d'écrire dedans
       DocumentXML->Active = true;
     
       // Créer un noeud
       _di_IXMLNode Noeud;
       Noeud = DocumentXML->CreateNode(WideString("Noeud1"));
     
       // Ajouter un attribut a ce noeud
       Noeud->SetAttribute(WideString("Attribut1"), WideString("Valeur"));
     
       // On ajoute le noeud (ici ce sera la racine, sinon 
       // tu appels ChildNodes->Add() du noeud auquel tu veux l'ajouter
       DocumentXML->ChildNodes->Add(Logiciel);
     
       // Enregistrer le fichier
       DocumentXML->SaveToFile(CheminFichier);
     
       // Vider un objet TXMLDocument
       DocumentXML->XML->Clear();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par d�faut demande d'explications suppl�mentaires
    Bonjour !

    Je tenais � vous remercier vivement pour les indications donn�es pour la cr�ation et la lecture d'un fichier xml.

    J'aurais 2 questions suppl�mentaires concernant ce que l'on m'a donn�:
    1) _di_IXMLNode Racine = DocumentXML->DocumentElement signifie-t-il bien que Racine est une variable de type XMLNode ? Que signifie alors _di_I?
    2)Je voudrais cr�er un �l�ment projet � qui est associ� une liste d'�l�ments module qui lui meme est associ� � une liste d'�l�ment personne
    Une Anomalie est caract�ris�e par une personne et par un module.
    Comment faut-il cr�er le fichier xml (Tout d'un coup avec x anomalies cr��es ou apr�s chaque anomalie cr��e)?

    Je suis peut-etre un peu lourd � demander �� mais je suis un d�butant avec le xml.

    Merci d'avance.

    A bientot.

  4. #4
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    Pour r�pondre � ta premi�re question concernant
    _di_IXMLNode Racine = DocumentXML->DocumentElement

    c'est le type qui est nomm� comme �a, mais ne t'inqui�te pas, Racine est bien un XMLNode. Regarde dans l'aide de Borland sur TXMLDocument puis sur Utilisation TXMLDocument.


    Concernant ta deuxi�me question, peut tu �tre plus pr�cis car j'ai un peu de mal a te suivre.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par d�faut Pr�cision concernant la question
    Rebonjour!

    Merci kurul1.
    Je vais essayer d'etre plus clair :
    Je suis entrain de cr�er une "base" d'anomalie qui permet de sauvegarder les anomalies et les "donn�es" sous un fichier xml.
    Une anomalie a comme attribut un nom, une date, un type, un programmeur et un module.
    Je voudrais que mon fichier xml ait la structure suivante :
    - <Projet>
    - <Module>
    -<Personne>
    -<Anomalie1>
    -<Anomalie2>

    Tous ces �l�ments sont des objets dans mon programme.

    Sachant qu'un projet est caract�ris� par un nom et une liste de modules et qu'un module est caract�ris� par un nom et une liste de personnes.
    J'ai un bouton "enregistrer" qui va me permettre la sauvegarde.

    Donc je gal�re pas mal pour trouver l'algorithme pour la sauvegarde et celui du chargement.

    Donc si tu peux m'aider car j'ai vraiment du mal en algo (j'ai pas encore la logique algo, mais je pense y parvenir avec plus d'exp�rience).
    (j'abuse peut-etre mais franchement l� je m'en sors pas).

    si il y a encore des probl�mes de compr�hension, n'h�site pas � me demander. j'essayerais de r�pondre pour que tu comprennes mieux.

    Merci.

    A bientot.

  6. #6
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut Re: Pr�cision concernant la question
    D'apr�s les indications concernant la structure de ton document XML ressemblerait � �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <Projet Nom="">
      <Module Nom="">
        <Personne Nom= "" >
          <Anomalie Nom="" Date="" Type="" Programmeur="" Module=""/>
           ...
        </Personne>
        ...
      </Module>
      ...
    </Projet>
    Dis-moi si je me trompe !

    Pour construire ton document :
    - tu commence donc par cr�er ton N�ud Projet que tu ajoute au document XML (ca sera ta racine).
    - Ensuite tu cr�e les n�uds Module du projet (un for sur le nombre de module de ton projet)
    - Pour chaque n�ud Module, tu cr�e ces n�uds Personne (Un for sur le nombre de personne de ton module)
    - Pour chaque n�ud Personne tu cr�e ces n�ud Anomalie (Un for sur le nombre d'anomalies de la personne.

    A chaque it�ration des for, tu ajoute le n�ud que tu viens de cr�er a ChildNodes du n�ud p�re.

    Exemple
    Pour le for de cr�ation des n�uds Module, tu ajoute la ligne

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
       Projet->ChildNodes->Add(Module) ;

    Pour la lecture, tu fonctionne sur le m�me principe
    - Tu r�cup�re ta racine Projet
    - Tu balaye chaque module
    - Pour chaque Module tu balaye chaque Personne
    - Pour chaque Personne tu balaye chaque Anomalie

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par d�faut Merci
    Salut Kurul1,

    Merci mille fois, t'es le meilleur.

    T'as compris ma demande sauf que je vais peut-etre retirer certains �l�ments des anomalies car je trouve qu'il y a redondance.

    Si par malheur, j'aurais besoin d'explications supll�mentaires, je peux te recontacter via le forum ?

    Encore merci.

    A Bientot

  8. #8
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    Je me suis aper�u qu'il y avait une redondance.

    Je pense que comme �a cela serait mieux

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <Projet Nom=""> 
      <Module Nom=""> 
        <Personne Nom= "" > 
          <Anomalie Nom="" Date="" Type=""/> 
           ... 
        </Personne> 
        ... 
      </Module> 
      ... 
    </Projet>

    Si tu as besoin d'aide, pose ta question sur le forum, on n'y r�pondra, c'est le principe de ce forum

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par d�faut petite demande
    Rebonjour,

    Si j'ai bien compris (j'avais eu l'id�e qui a �t� confirm�e), il fait faire une boucle for genre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    for (int i=0; i<Liste_élément, i++)
    {
      ....
    }
    Mais il faut bien mettre l'entier i en param�tre, non?
    Si oui, c'est dans � quel moment qu'il entre en jeu?

    Merci.

    A Bientot.

  10. #10
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    tu veux mettre l'entier i en param�tre de quoi ?

    c'est ton indice de boucle, il peut seulement te servir pour acc�der a tes donn�es si par exemple tu balaye un tableau ou une liste.

    Par contre pour la lecture de ton document XML, si tu veux savoir le nombre de fils d'un noeud, tu peux utiliser la commande

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
            Noeud->ChildNodes->GetCount();

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Par d�faut
    Excuse moi, kurul1, je me suis mal expliquer.

    Je voulais dire que , par exemple, pour supprimer ou ajouter un element d'une liste, on indiquait l'indice.
    Je voulais savoir si c'est la m�me chose pour le xml.

    De plus, il va y avoir plusieurs projets donc est-ce que je peux garder projet comme racine ou je dois d�finir une nouvelle racine.

    De plus, je comprends pas :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Noeud->SetAttribute(WideString("Attribut1"),WideString("Valeur"));
    A quoi sert WideString("Attribut1") et WideString("Valeur").

    Je peux pas tester car je travaille sur cette application que le soir chez moi, et ce que j'ai pas compris je le demande la journ�e.

    Je sais que le forum est fait pour ce genre de demande mais je te prie de m'excuser car j'ai vraiment l'impression d'etre un super nul.
    (�a fait plus d'un an que j'ai pas toucher au C++ et je n'avais que quelques notions !)

    Merci

    A Bientot

  12. #12
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    Pout l'ajout de n�ud fils, cet ajout ce fait toujours � la fin, je n'ai pas trouv� dans l'aide de m�thode permettant d'ajouter un n�ud � un indice donn�.

    Par contre pour la lecture, tu peux acc�der au n�ud fils d'indice i

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
         _di_IXMLNode NoeudFils = Noeud->ChildNodes->GetNode(i);
    Le premier indice est 0 comme dans les tableaux et les listes.

    Pour la suppression, tu dois pouvoir supprimer le n�ud d'indice i comme ceci mais v�rifie car j'ai retranscrit ce que j'ai trouv� dans l'aide

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
         Noeud->ChildNodes->Delete(i);

    --------------


    Concernant la racine de ton document. Je pense que tu n'es pas oblig� de d�finir une autre Racine, tu dois pouvoir mettre directement tous tes projet. Il te suffit de les ajouter dans ChildNodes de DocumentElement. Mais essaye car moi je n'ai pas essay�.


    ----------------


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
         Noeud->SetAttribute(WideString("Attribut1"),WideString("Valeur"));
    Attribut1 : c'est le nom de ton attribut
    Valeur : c'est la valeur de ton attribut

    Tu es oblig� de les convertir en WideString


    ---------


    Ne dis pas que tu es nul, Personne ne peut pr�tendre tout conna�tre. Moi non plus il n'y � pas si longtemps je ne connaissais rien � la manipulation des documents XML. Moi aussi j'ai pos� des questions sur ce forum. C'est donc normal que je te r�ponde.

  13. #13
    say
    say est d�connect�
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Ao�t 2002
    Messages
    1 176
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 1 176
    Par d�faut
    euh....me trompes-je en disant qu'il ya tjrs une balise racine en XML?...je ne crois pas.
    Citation Envoy� par kurul1
    Concernant la racine de ton document. Je pense que tu n'es pas oblig� de d�finir une autre Racine, tu dois pouvoir mettre directement tous tes projet. Il te suffit de les ajouter dans ChildNodes de DocumentElement. Mais essaye car moi je n'ai pas essay�.
    DocumentElement est justement la balise root.
    pour ma part, je fais souvent quelque chose dans ce genre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    <Projets>
    <Projet>...</Projet>
    <Projet>...</Projet>
    ...
    </Projets>
    la balise racine est juste un point d'entr�e, on pourrait tr�s bien l'appeler <root>
    On peut envisager un attribut pr <Projet> pour les acc�der tr�s simplement.
    je pr�vois aussi tjrs une DTD qui me permettra de connaitre et mes collaborateurs aussi, la struture du fichier et surtout de pouvoir utiliser une validation donc du XPath...[ce que ne fait pas XmlDocument...on est d'accord]

    Par ailleurs, je doute qu'il soit possible d'ins�rer un noeud � un index particulier en effet, en tout cas pas directement...�ventuellement en reprenant l'ensemble des noeuds et en les ajoutant � la file.

    A+

  14. #14
    Nouveau candidat au Club
    Inscrit en
    Juin 2007
    Messages
    2
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Par d�faut
    c'est vraiment tres detaille comme reponse, mais que pourrait faire quelqu'un comme moi, coince avec Borland 5 (comme dans cinq), et un clavier sans accent?

    Aller, pour aider, je trouve la solution du 2e probleme: code ASCII.

    Propositions pour XML lecture/ecriture en Borland 5?

    Merci,

    Raz.

  15. #15
    Nouveau candidat au Club
    Inscrit en
    Juin 2007
    Messages
    2
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Par d�faut
    peut-etre j'aurais du expliquer la nature du probleme dans mon dernier post: il n'y a pas de composante TXMLDocument dans Borland 5 (oui, on parle de la version du compilateur des annes '70), donc impossible de la glisser sur ma fiche, et encore moins possible d'utiliser ses composantes.

    Merci aux penseurs de ce forum, pour une eventuelle solution qui me sortirait de cet embarras...

    Raz.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 23/07/2009, 11h44
  2. [DOM XML] Lire un fichier xml
    Par axel-erator dans le forum Biblioth�ques et frameworks
    R�ponses: 7
    Dernier message: 07/12/2005, 22h36
  3. lire un fichier xml
    Par stephanie5 dans le forum C++Builder
    R�ponses: 6
    Dernier message: 18/11/2005, 16h34
  4. Comment lire un fichier XML ?
    Par jeromelef dans le forum D�buter
    R�ponses: 6
    Dernier message: 29/06/2005, 15h52
  5. R�ponses: 5
    Dernier message: 11/01/2004, 20h17

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