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 :

extraire les informations d'un fichier XML


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 48
    Par défaut extraire les informations d'un fichier XML
    bonjour;
    j'ai un fihcier XML d'une edition des livres, ce fichier contient le nom du livre,l'auteur,url du livre,url d'mage du livre, la date,...
    voila un exemple
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet title="XSL_formatting" type="text/xsl" href="/WileyCDA/feed/RSS_WILEY2_ALLNEWTITLES.xsl"?>
     
    <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
      <channel>
        <title>Wiley: All New Titles</title>
        <link>http://eu.wiley.com</link>
        <description>New titles on Wiley.com</description>
        <copyright>Copyright &amp;copy; 2000-2008 by John Wiley &amp;amp; Sons, Inc. or related companies. All rights reserved.</copyright>
        <pubDate>Tue, 19 Feb 2008 05:19:50 GMT</pubDate>
        <dc:date>2008-02-19T05:19:50Z</dc:date>
        <dc:rights>Copyright &amp;copy; 2000-2008 by John Wiley &amp;amp; Sons, Inc. or related companies. All rights reserved.</dc:rights>
        <image>
          <title>Wiley: All New Titles</title>
          <url>http://media.wiley.com/assets/1144/11/wiley-logo-sm.gif</url>
          <link>http://eu.wiley.com</link>
        </image>
        <item>
          <title>Differential Equations with Mathematica, 3rd Edition</title>
          <link>http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471773166.html?cid=RSS_WILEY2_ALLNEWTITLES</link>
          <description>&lt;img src="http://media.wiley.com/spa_assets/spa_images/rsstrack.gif?Section=RSS_WILEY2_ALLNEWTITLES&amp;PageType=RSS&amp;SiteCd=WILEYEUROPE2" width="1" height="1" border="0" align="top"&gt; &lt;br&gt; &lt;a href="http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471773166.html?cid=RSS_WILEY2_ALLNEWTITLES"&gt;Read More...&lt;/a&gt; &lt;br&gt;</description>
          <pubDate>Mon, 18 Feb 2008 05:00:00 GMT</pubDate>
          <guid>http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471773166.html?cid=RSS_WILEY2_ALLNEWTITLES</guid>
          <dc:creator>Brian R. Hunt, Ronald L. Lipsman, John E. Osborn, Jonathan M. Rosenberg</dc:creator>
          <dc:date>2008-02-18T05:00:00Z</dc:date>
        </item>
    comment je recupere ces informations?
    merci.

  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
    il te suffit d'utiliser le composant TXMLDocument que tu trouveras dans la palette de composant Internet.

    Ensuite il te faudra charcher ton document XML comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DocumentXML->LoadFromFile(CheminFichierXML);
    Ou CheminFichierXML est un AnsiString contenant le chemin d'accès de ton fichier

    Une fois ton document chargé, il te suffit de le balayer et de récupérer les informations contenu dans les différents noeuds,

    Après, il faut étudier la structure de ton fichier XML pour faire une méthode d'extraction qui respecte la structure de ton document.

    Voici les méthodes que j'utilise mais c'est à toi de réaliser le test des valeurs et les stocker dans ce que tu veux.

    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
     
    // Récupérer le noeud racine du document
    _di_IXMLNode Racine = DocumentXML->DocumentElement;
     
    // Tester si un noeud porte bien le Nom qu'on veut
    if(AnsiString(Noeu->GetNodeName()).AnsiCompareIC("NOM") == 0)
     
    // Tester si un noeud contient bien un atribut "ATTRIBUT"
    if(!(Noeud->GetAttribute("ATTRIBUT")).IsNull())
     
    // Tester la valeur d'un atrribut
    if(AnsiString(Noeud->GetAttribute("ATTRIBUT")).AnsiCompareIC("Valeur") == 0)
     
    // Récupérer le noeud fils d'un noeud (ici le noeud est FILS)
    _di_IXMLNode NoeudFils = Noeud->ChildNodes->FindNode("FILS");
    // Si NoeudFils n'est pas null, c'est que le noeud existe
     
    // récupérer le nombre de noeud fils d'un noeud
    int Nb = Noeud->ChildNodes->GetCount();
    Ensuite quand tu as terminé, il faut vider le document et le rendre inactif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // On vide le document XML
    DocumentXML->XML->Clear();
     
    // On désactive le document XML
    DocumentXML->Active = false;

  3. #3
    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
    J'ai oublié une méthode qui pourrait te servir aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Récupéer la valeur d'un noeud
    Variable = Noeud->GetNodeValue();

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Sinon tu peut aussi utiliser la librairie tinyxml en t'aidant de cette article.

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 48
    Par défaut
    j'ai glisser le composant TXMLDocument sur mon application, j'ai remplit les proprietés suivants:
    Active=true;
    FileName=file1.xml
    Name=DocumentXML
    ensuite j'ai ajouté ce code
    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     TXMLDocument DocumentXML;
     DocumentXML->LoadFromFile("file1.xml");
     // Récupérer le noeud racine du document
     _di_IXMLNode Racine = DocumentXML->DocumentElement;
     
      // Tester si un noeud porte bien le Nom qu'on veut
      if(AnsiString(Noeud->GetNodeName()).AnsiCompareIC("NOM") == 0)
     
      // Tester si un noeud contient bien un atribut "ATTRIBUT"
      if(!(Noeud->GetAttribute("ATTRIBUT")).IsNull())
     
      // Tester la valeur d'un atrribut
      if(AnsiString(Noeud->GetAttribute("ATTRIBUT")).AnsiCompareIC("Valeur") == 0)
     
      // Récupérer le noeud fils d'un noeud (ici le noeud est FILS)
      _di_IXMLNode NoeudFils = Noeud->ChildNodes->FindNode("FILS");
      // Si NoeudFils n'est pas null, c'est que le noeud existe
     
      // récupérer le nombre de noeud fils d'un noeud
      int Nb = Noeud->ChildNodes->GetCount();
     
     
      // On vide le document XML
      DocumentXML->XML->Clear();
      // On désactive le document XML
      DocumentXML->Active = false;
    }
    //---------------------------------------------------------------------------
    il ne reconné pas le composant TXMLDocument.
    il m'affiche le message suivant:

    [C++ Error] Unit1.cpp(21): E2459 VCL style classes must be constructed using operator new
    [C++ Error] Unit1.cpp(21): E2285 Could not find a match for 'TXMLDocument::TXMLDocument()'
    [C++ Error] Unit1.cpp(22): E2288 Pointer to structure required on left side of -> or ->*
    [C++ Error] Unit1.cpp(24): E2288 Pointer to structure required on left side of -> or ->*
    [C++ Error] Unit1.cpp(27): E2451 Undefined symbol 'Noeud'
    [C++ Warning] Unit1.cpp(36): W8004 'NoeudFils' is assigned a value that is never used
    [C++ Error] Unit1.cpp(44): E2288 Pointer to structure required on left side of -> or ->*
    [C++ Error] Unit1.cpp(46): E2288 Pointer to structure required on left side of -> or ->*
    [C++ Warning] Unit1.cpp(49): W8004 'Nb' is assigned a value that is never used
    [C++ Warning] Unit1.cpp(49): W8004 'Racine' is assigned a value that is never used
    [C++ Warning] Unit1.cpp(49): W8004 'DocumentXML' is assigned a value that is never used

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 48
    Par défaut
    j'ai reglé le probleme.

    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     int nb,i;
      TXMLDocument * mrXMLDoc = new TXMLDocument("test.xml");
      mrXMLDoc->DOMVendor = GetDOMVendor("MSXML");
      mrXMLDoc->FileName="test.xml";
      mrXMLDoc->Active = true;
      _di_IXMLDocument XMLDoc = LoadXMLDocument("test.xml");
      IXMLNode * doc =  XMLDoc->DocumentElement;  
      IXMLNode * node = doc->ChildNodes->FindNode("channel");
      nb = node->ChildNodes->GetCount();
      Edit1->Text=IntToStr(nb);
      Memo1->Lines->Clear();
      for(i=0;i < nb;i++)
      {
        Memo1->Lines->Add(node->ChildNodes->Nodes[i]->ChildNodes->FindNode("title")->GetNodeValue());
        Memo1->Lines->Add(node->ChildNodes->Nodes[i]->ChildNodes->FindNode("link")->GetNodeValue());
       //ect...
        Memo1->Lines->Add("---------------------------------------");
      }
      mrXMLDoc->XML->Clear();
      mrXMLDoc->Active = false;
    }
    //---------------------------------------------------------------------------
    voici un petit exemple du fichier XML:
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet title="XSL_formatting" type="text/xsl" href="/WileyCDA/feed/RSS_WILEY2_ALLNEWTITLES.xsl"?>
     
    <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
      <channel>
       <item>
        <title>Wiley: All New Titles</title>
        <link>http://eu.wiley.com</link>
        <description>New titles on Wiley.com</description>
        <copyright>Copyright &amp;copy; 2000-2008 by John Wiley &amp;amp; Sons, Inc. or related companies. All rights reserved.</copyright>
        <pubDate>Tue, 19 Feb 2008 05:19:50 GMT</pubDate>
        <dc:date>2008-02-19T05:19:50Z</dc:date>
         </item>
            <item>
          <title>Differential Equations with Mathematica, 3rd Edition</title>
          <link>http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471773166.html?cid=RSS_WILEY2_ALLNEWTITLES</link>
          <description>&lt;img src="http://media.wiley.com/spa_assets/spa_images/rsstrack.gif?Section=RSS_WILEY2_ALLNEWTITLES&amp;PageType=RSS&amp;SiteCd=WILEYEUROPE2" width="1" height="1" border="0" align="top"&gt; &lt;br&gt; &lt;a href="http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471773166.html?cid=RSS_WILEY2_ALLNEWTITLES"&gt;Read More...&lt;/a&gt; &lt;br&gt;</description>
          <pubDate>Mon, 18 Feb 2008 05:00:00 GMT</pubDate>
          <guid>http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471773166.html?cid=RSS_WILEY2_ALLNEWTITLES</guid>
          <dc:creator>Brian R. Hunt, Ronald L. Lipsman, John E. Osborn, Jonathan M. Rosenberg</dc:creator>
          <dc:date>2008-02-18T05:00:00Z</dc:date>
        </item>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. extraire les données d'un fichier.xml en Listes
    Par Hatixhe dans le forum Caml
    Réponses: 15
    Dernier message: 13/10/2013, 16h48
  2. Extraire les données d'un fichier XML (log)
    Par sarra2104 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 20/05/2012, 09h33
  3. extraire les données d'un fichier xml avec xmlspy
    Par mouna1 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/06/2009, 13h50
  4. Extraire les informations d'un fichier avi
    Par rolls dans le forum C
    Réponses: 2
    Dernier message: 16/04/2009, 16h59
  5. Réponses: 0
    Dernier message: 15/04/2009, 15h57

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