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 :

Parser un XML en C++


Sujet :

C++

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Par défaut Parser un XML en C++
    Bonjour,

    Je suis confronté à un problème assez complexe (malgré le titre simpliste de mon sujet). Voici ma situation. J'ai un fichier XML sous la forme :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <segment>
    	<id>1</id>
    	<from-ms>0</from-ms>
    	<to-ms>1000</to-ms>
    	<name>Music</name>
    </segment>
    <segment>
    ...
    ...
    </segment>
    ...
    ...

    Et mon objectif c'est de récupérer toutes les durées de chaque segment (donc 1000-0=1000 par exemple), donc de récupérer la soustraction de chaque <to-ms> avec son <from-ms>. Car en fait, si un segment fait moins de 2 secondes, je dois l'ajouter dans le suivant enfin bref je dois modifier le fichier XML.

    Alors j'ai essayé avec TinyXML mais ça ne me permet pas de récupérer ce que je veux. Avez-vous des solutions pour ce problème ?

    Merci à vous. ^^

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Votre question est complètement incohérente.

    Le titre, c'est "Parser un XML en C++".

    Dans votre question, vous nous dites :

    enfin bref je dois modifier le fichier XML
    Donc, vous devez parser le XML ou le modifier ?

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Il y a deux manières principales de modifier un xml:
    • Soit l'analyser intégralement, puis en écrire un autre, qui soit le résultat de la modification: préfère un parser type sax, et pour l'écriture, à la main (c'est vite fait)
    • Soit constituer l'arborscence des noeuds du document, la modifier, l'écrire dans un (autre) fichier: pour cela, on utilisera plutot un parser type dom

    A toi de voir ton besoin réel

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Par défaut
    Ma question concerne vraiment le fait de parser le XML pour en récupérer un contenu précis. C'est après cette étape que je devrais modifier le XML, mais pour l'instant je veux juste arriver à choper les durées des segments comme je l'ai expliqué.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    La technique est justement très différente selon ce que tu veux en faire.

    Si c'est pour extraire quelques informations, les parsers du type SAX sont les plus adaptés (plus simples, plus rapides, plus petits, etc).
    Si au contraire, tu veux apporter des modifications structurelles, les parsers DOM seront plus utiles.

    Au pire, un xml est un fichier texte.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    On pourrait voir où tu en es ?
    Parce que
    Citation Envoyé par Raphy55 Voir le message
    Alors j'ai essayé avec TinyXML mais ça ne me permet pas de récupérer ce que je veux. Avez-vous des solutions pour ce problème ?
    On ne te donnera pas la solution comme ça, et surtout TinyXml sert justement à parser du XML.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Par défaut
    Alors j'ai réussi à récupérer ce que je voulais. Mon problème maintenant c'est que j'aimerais modifier le texte qui est entre deux balises. Par exemple :

    <id>2</id>

    Je veux remplacer le 2 par un 3 imaginons. TinyXml propose une fonction GetText() mais pas SetText()... Et si je passe par SetValue() ça modifie carrément le texte de la balise, donc "id".

    Si vous avez une idée, merci.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    A nouveau : peut-on voir du code !?
    Il est clair que tu utilises mal/ne sais pas utiliser tinyxml. Pour changer le texte d'un élément il faut utiliser SetValue tout simplement.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Par défaut
    Voilà la partie du code, avec le SetText() que je souhaite faire :

    Nom : Code.JPG
Affichages : 780
Taille : 52,6 Ko

    Si je fais SetValue() ça modifie le texte dans la balise puisque, si j'ai bien compris, c'est un TiXmlElement...

  10. #10
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Et que ferai ton "setText"?
    En quoi cela serait-il différent du setValue()?

  11. #11
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Par défaut
    Parce que le SetValue() sur un TiXmlElement va modifier la balise, or moi je veux modifier le texte entre les balises. Par exemple :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <segment>
    <id>1</id>
    <from-ms>2500</from-ms>
    <to-ms>9000</to-ms>
    <name>Music</name>
    </segment>

    Je veux remplacer le 2500 par un 0 imaginons. Eh bien en faisant SetValue() j'ai obtenu :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <segment>
    <id>1</id>
    <0>2500</0>
    <to-ms>9000</to-ms>
    <name>Music</name>
    </segment>

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    La documentation de GetText() en dit pourtant assez: Pour manipuler le texte normalement, il faut manipuler un nœud de type TiXmlText.
    Donc, manipuler child2->FirstChild() et faire un SetValue() sur ce nœud-là plutôt que child2 lui-même.

    Il ne m'a pas fallu dix minutes pour comprendre ça, donc tu aurais pu faire un effort...
    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.

  13. #13
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    a priori, c'est parce qu'il faut que tu attrapes le noeud text contenu dans ton noeud to-ms.

    car en effet, "<xml>truc</xml>" correspond à un noeud element nommé xml, contenant un noeud text de valeur truc

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Par défaut
    Merci Médinoc, ça marche. J'avais fait beaucoup de recherches mais comme j'ai une deadline j'ai préféré venir ici tout en continuant mes recherches pour maximiser mes chances de finir.

    Merci pour votre aide, sujet résolu.

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

Discussions similaires

  1. [C#] Parser du XML
    Par karl3i dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/02/2009, 09h46
  2. [DOM] Parser un XML
    Par Zapan dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 02/12/2005, 11h41
  3. [DOM XML] Comment parser du XML avec une version 4.3 ?
    Par ouioui2000 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 18/10/2005, 15h52
  4. [FLASH MX2004] Parser un XML en action script
    Par jejeman dans le forum Flash
    Réponses: 6
    Dernier message: 20/09/2005, 17h25
  5. [XSL] Parser fichier xml : erreurs + incompréhensions
    Par totobouchon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/07/2005, 15h47

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