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++ Discussion :

recuperer un mot dans un fichier xml


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut recuperer un mot dans un fichier xml
    Bonjour,

    je voudrais recuperer un mot dans un fichier xml est le mettre dans une variable.
    voici un ex (bidon) de ce qui a dans le fichier xml
    <description>test</description>
    <name ="toto" state="XXX">blabla </name>
    je voudrais XXX est le mettre dans une chaine de caractere si state="XXX" exixte

    est ce que quelqu'un a une idee?

  2. #2
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Regarde l'api DOM, et le langage XPATH.

  3. #3
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut
    Regarde l'api DOM, et le langage XPATH.
    ???

    pour l'instant j'en suis ici

    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
    // le constructeur de ifstream permet d'ouvrir un fichier en lecture
        std::ifstream fichier( "D:\test.xml" );
     
        if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
        {
            std::string ligne; // variable contenant chaque ligne lue
     
            // cette boucle s'arrête dès qu'une erreur de lecture survient
            while ( std::getline( fichier, ligne ) )
            {
    			if ()
    			{
     
    			}
            }
        }
    comment je peut tester si state est dans la ligne et comment je recupere le mot suivant dans une variable

    merci

  4. #4
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // le constructeur de ifstream permet d'ouvrir un fichier en lecture
        std::ifstream fichier( "D:\test.xml" );
    ceci ne m'ouvre pas mon fichier test.xml qui est sur D:\

    merci

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Tu as effectivement l'option sur laquelle tu as commencé à travailler (ouvrir le fichier lire ligne par ligne etc). Au fait, fichier( "D:\test.xml" );, il faut 2 backslash fichier( "D:\\test.xml" );

    Sinon, tu as l'autre option à mon avis plus viable et pérenne qui est d'utiliser un parser XML avec entres autres l'api DOM. Tu peux aussi regarder du côté de TinyXML avec un tuto ici
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    white_tentacle a voulu dire que tu dois utiliser une librairie pour manipuler les fchiers xml. Sinon voici un peu de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::string::size_type pos=ligne.find("state=\"");
    if (pos!=std::string::npos)
    {
     pos+=7;//la taille de "state=\""
     std::string::size_type endpos=ligne.find("\"",pos);
     std::string result=ligne.substr(pos,endpos-pos);
    }

  7. #7
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut
    ok

  8. #8
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut
    Je ne rentre pas dans le if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::string::size_type pos=ligne.find("state=\"");
    if (pos!=std::string::npos)
    {
     pos+=7;//la taille de "state=""
     std::string::size_type endpos=ligne.find("\"",pos);
     std::string result=ligne.substr(pos,endpos-pos);
    }
    cela veu dire qu'il ne trouve pas ?

  9. #9
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    En fait, le problème, c'est que si tu le fais toi même (et c'est valable pour tout le monde, hein, rien de personnel ), je suis à peu près sûr que tu ne gèreras pas correctement plein de cas. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <name toto="tutu
    state="tata" />
    Parfaitement valide de l'avoir sur plusieurs lignes...

    Pour lire un xml, le mieux est d'utiliser un parseur xml, c'est fait pour !

    Sous windows, MsXml est très simple d'emploi, et fait tout ce dont tu auras besoin.

    Sous Linux, expat est léger et pratique, mais assez peu intuitif pour un débutant. Qt a un QtXML, je ne l'ai jamais utilisé mais il doit sûrement être bien. Sinon, je ne sais pas ce que vaut la libxml, mais pareil, elle doit pas être trop mal.

  10. #10
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut
    attention je ne veu pas valider le xml juste mettre dans une variable ce que contient state pareil qu'un fichier txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <name toto="tutu
    state="tata" />
    la je voudrais recuperer
    tata
    je vien de recuperer ce qui a dans chaque ligne comment je cherhce si il y a state=" dans la ligne et extraire ce qu'il y a entre les ""

    merci

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Et bien le code que je t'ai donné plus haut devrait te satisfaire.

  12. #12
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut
    Je ne rentre pas dans le if


    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::string::size_type pos=ligne.find("state=\"");
    if (pos!=std::string::npos)
    {
     pos+=7;//la taille de "state=""
     std::string::size_type endpos=ligne.find("\"",pos);
     std::string result=ligne.substr(pos,endpos-pos);
    }
    cela veu dire qu'il ne trouve pas ?

    Code :
    state="XXX"

  13. #13
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Comment sais-tu que tu ne rentres pas dedans ? T'es en mode debug en exécution pas à pas ?
    Parce que ce code exemple, il ne fait rien...

  14. #14
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut
    ok ca fonctionne merci

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

Discussions similaires

  1. [Objective-C] Recuperer la valeur de l'attributs d'un élément dans un fichier XML
    Par leconteconte dans le forum Objective-C
    Réponses: 0
    Dernier message: 21/02/2013, 16h14
  2. Ajouter un mot dans un fichier xml
    Par wineju dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 07/02/2012, 13h34
  3. Recuperer des données dans un fichier XML
    Par Thibault92 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 11/07/2011, 18h14
  4. recuperer des parametres dans un fichier xml
    Par liogo dans le forum MATLAB
    Réponses: 1
    Dernier message: 11/03/2011, 14h49
  5. crypter un mot de passe dans un fichier.xml
    Par ghnawfal dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 21/12/2010, 15h00

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