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