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

Bibliothèques Discussion :

[Xerces] Utilisation Donnees D'un XML avec Xerces C++


Sujet :

Bibliothèques

  1. #1
    Membre du Club Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Points : 52
    Points
    52
    Par défaut [Xerces] Utilisation Donnees D'un XML avec Xerces C++
    Bonjour !
    Voilà, pour mon ap, je dois parser un fichier xml en c++.
    En cherchant, j'ai donc trouvé xerces qui permet de faire ceci.
    Mais je me trouve face à des soucis bien évidement (si tout allait bien ça ne serait pas normal !) :

    1-> J'ai un souci de linker que voici


    2-> Puis j'ai un autre souci, plus grave je pense, mais finalement moins urgent Je ne comprend pas trop le contenu des fichiers h ou hpp de xerces
    et j'aimerai bien savoir ce que fait le DOM parser
    voilà mon fichier cpp

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
     
    #include <iostream>
    #include <fstream>
     
    #include <xercesc/parsers/XercesDOMParser.hpp>
    #include <xercesc/dom/DOM.hpp>
    #include <xercesc/sax/HandlerBase.hpp>
    #include <xercesc/util/XMLString.hpp>
    #include <xercesc/util/PlatformUtils.hpp>
     
    #if defined(XERCES_NEW_IOSTREAMS)
    #include <iostream>
    #else
    #include <iostream.h>
    #endif
     
     
    using namespace std;
    XERCES_CPP_NAMESPACE_USE
     
     
        int xerces_function () {
     
            try {
                XMLPlatformUtils::Initialize();
            }
            catch (const XMLException& toCatch) {
                char* message = XMLString::transcode(toCatch.getMessage());
                cout << "Error during initialization! :\n"
                     << message << "\n";
                XMLString::release(&message);
                return 1;
            }
     
            XercesDOMParser* parser = new XercesDOMParser();
            parser->setValidationScheme(XercesDOMParser::Val_Always);    // optional.
            parser->setDoNamespaces(true);    // optional
     
            ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
            parser->setErrorHandler(errHandler);
     
            char* xmlFile = "test.xml";
     
            try {
                parser->parse(xmlFile);
            }
            catch (const XMLException& toCatch) {
                char* message = XMLString::transcode(toCatch.getMessage());
                cout << "Exception message is: \n"
                     << message << "\n";
                XMLString::release(&message);
                return -1;
            }
            catch (const DOMException& toCatch) {
                char* message = XMLString::transcode(toCatch.msg);
                cout << "Exception message is: \n"
                     << message << "\n";
                XMLString::release(&message);
                return -1;
            }
            catch (...) {
                cout << "Unexpected Exception \n" ;
                return -1;
            }
     
            delete parser;
            delete errHandler;
            return 0;
        }
     
     
    void ecrire_fichier_xml()
    {
         ofstream Sortie("test.xml");
     
         Sortie<<"<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>"<<endl;
         Sortie<<"<!--  Données XML  --> "<<endl;
         Sortie<<"<Banque>"<<endl;
         Sortie<<"<!--  Nom Client --> "<<endl;
         Sortie<<"<client>"<<endl;
         Sortie<<"<Nom_client>Martin</Nom_client>"<<endl;
         Sortie<<"<!--  debit compte -->"<<endl;
         Sortie<<"<debit>100</debit> "<<endl;
         Sortie<<"</client>"<<endl;
         Sortie<<"</Banque>"<<endl;
         Sortie.close();
    }
     
    int main(int argc, char *argv[])
    {
     // utilisation des fichiers  
     
    ecrire_fichier_xml();
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    Il y a peut être un conflit avec les iostream enfin je sais pas trop à vrai dire !

    Merci d'avance

  2. #2
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Tu as inclus le .lib de xerces dans tes options d'editions de lien ?
    J'aime pas les épinards... Mais alors pas du tout

  3. #3
    Membre du Club Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Points : 52
    Points
    52
    Par défaut
    ok !
    Ben en fait n'étant pas sous linux, la seule version valide est pour Visual c++.
    Je suis donc allée dessus.
    J'ai fais toutes les liaisons necessaires et ca fonctionne !
    Alors quand je dis ca fonctionne, c'est que ca compile, ca ne fait pas d'erreur de liaison ou de compilation c'est plutot bon signe
    Maintenant je suis parfaitement perdue dans tout ce code
    Je sais ce que je veux en fait, mais je ne sais pas comment le faire ,quelles fonctions utiliser etc ...
    Alors comme précisé plus haut j'ai fait un DOM parser, (le code est en haut).
    Donc je vous décris ce que je veux en fait !
    Pour le moment pas de MFC, mais juste une fenetre noire comme le cmd.
    que je souhaiterai ca serait quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cout<<"Votre Nom est : "variable_qui_recupererai_le_nom_dans_le_fichierXML<<endl;
    etc ...
    C'est pas tiré par les cheveux je pense ! Enfin Ca l'est pour moi car je ne sais pas le faire

    Merci d'avance !

  4. #4
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    il n'y a pas d'exemple d'utilisation sur le site d'Apache ?

  5. #5
    Membre du Club Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Points : 52
    Points
    52
    Par défaut
    a vrai dire je ne sais pas trop
    je suis perdue dans toutes ces lignes de codes, et pourtant il faut bien que j'avance !
    Je vais encore tout bien regarder

  6. #6
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    et ça t'es allé voir ?
    http://xml.apache.org/xerces-c/

    comme souvent avec l'open source, la documentation est assez légère et confuse, c'est dommage.

  7. #7
    Membre du Club Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Points : 52
    Points
    52
    Par défaut

    Oui bien sur je suis allée voir ca !
    Mais voilà comme tu dis c'est assez confus, et pas tres simple de plus !!
    merci quand mm

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Avec xerces-c il y a :
    - de la doc " doc/ "
    - des examples " samples/ "

    J'ai pas trop compris tu veux faire koi ?

  9. #9
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Bah je sais pas trop comment fonctionne un DOM parser (je sait pas trop a quoi ca sert dailleur) mais je sais que pour lire un fichier xml je doit créer une classe qui hérite de DefaultHandler (ou un truc comme ca) et c'est en surchargant les fonctions de ce handler que tu peux lire les données de ton fichier...

    Peut etre que tu doit Créer une classe qui hérite de XercesDOMparser...
    J'aime pas les épinards... Mais alors pas du tout

  10. #10
    Membre du Club Avatar de Laeticia
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 98
    Points : 52
    Points
    52
    Par défaut
    Il y a également une foule de méthodes comme DOMTreeWalker
    j'essaye d'utiliser ca comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void Tree_walker()
    {
     
    DOMNode*      aNode;
    //-> pour les noeuds
     
    aNode.getRoot();
    // Pour se déplacer sur la root du fichier
    }
    Et là il plante il me dit :
    left of '.getRoot' must have class/struct/union type

    Vous voyez pourquoi ???

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Héhé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DOMNode* aNode; // <-- c'est un pointeur
    aNode->getRoot();

  12. #12
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Pour les problème de linkage situé plus moi j'ai remplacé les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #if defined(XERCES_NEW_IOSTREAMS)
    #include <iostream>
    #else
    #include <iostream.h>
    #endif
     
     
    using namespace std;
    XERCES_CPP_NAMESPACE_USE
    Par celles-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <iostream>
    #include <cstdlib>
     
    using namespace std;
     
    XERCES_CPP_NAMESPACE_USE

  13. #13
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    J'ai une question : comment accéder aux données des élements avec Xerces ?

Discussions similaires

  1. Lire un fichier XML avec Xerces ou autre ?
    Par ostralo dans le forum XML
    Réponses: 2
    Dernier message: 22/01/2009, 11h19
  2. [XSD] [Xerces-J 1.4.4] Validation XML avec schéma XSD
    Par g_rare dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 08/04/2008, 16h40
  3. [xerces] Lier un xml avec une feuille de style
    Par alexthomas dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 15/11/2007, 13h21
  4. [Xerces] pb de validation xml avec un schema stocké dans un jar
    Par dvicente72 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/07/2007, 11h33
  5. [XSD][xerces] validation xml avec un xsd
    Par chand_bing dans le forum Valider
    Réponses: 2
    Dernier message: 05/02/2004, 20h21

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