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

XML Discussion :

[C++]Connaissez-vous ces librairie XML Orientée Objet ?


Sujet :

XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [C++]Connaissez-vous ces librairie XML Orientée Objet ?
    Bonjour,

    J'aimerais savoir comme le dit le titre si vous connaissez les librairies suivantes :

    Reason C++ Library --> http://reasoning.info/
    POCO C++ Libraries --> http://pocoproject.org/
    Arabica XML Toolkit --> http://www.jezuk.co.uk/cgi-bin/view/arabica


    J'ai fouillé dans ces trois sites et pas un code XML/C++ de trouvé !!! Le monde est trizo ?

    Ca fait depuis longtemps que j'ai débuté un projet (un jeu de rôle) en C++ en uilisant la bibliothèque graphique SFML et actuellement je reste bloqué car je n'ai soit pas trouvé de bonnes librairies ou soit j'en ai trouvé mais sans documentation/exemples/tutoriel.

    Aurez-vous des exemples de codes ou des liens menant à des sites proposant de bons tutoriels ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    A titre d'exemples, voici 2 codes en C# et un 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
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <repertoire>
      <compte>
        <num>94</num>
        <nom>Batman</nom>
        <solde>500000</solde>
        <decouvert>500</decouvert>
      </compte>
      <compte>
        <num>92</num>
        <nom>Joker</nom>
        <solde>25000</solde>
        <decouvert>0</decouvert>
      </compte>
    </repertoire>
    L'ajout un compte dans le repertoire (fichier XML), autrement dit l'ecriture:
    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
     
                        XmlDocument doc.Load("repertoire.xml");
                        XmlElement root = doc.DocumentElement;
     
                        XmlElement cpt = doc.CreateElement("compte");
                            XmlElement num = doc.CreateElement("num");
                            num.InnerText  = "77";
                            XmlElement nom = doc.CreateElement("nom");
                            nom.InnerText  = "Rambo";
                            XmlElement solde = doc.CreateElement("solde");
                            solde.InnerText  = "0" ;
                            XmlElement decouvert = doc.CreateElement("decouvert");
                            decouvert.InnerText  = "0";
     
                        cpt.AppendChild(num);
                        cpt.AppendChild(nom);
                        cpt.AppendChild(solde);
                        cpt.AppendChild(decouvert);
     
                        root.AppendChild(cpt);
                        doc.Save("repertoire.xml");
    et voici l'extraction c'est à dire la lecture
    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
     
                Compte[] tabcpt = new Compte[20];
                XmlDocument doc.Load("repertoire.xml");
                XmlElement root = doc.DocumentElement;
     
                XmlNodeList listeCompte = doc.SelectNodes("/repertoire/compte");
     
                iNbc = 0;
     
                while (iNbc < this.tabcpt.Length && iNbc < listeCompte.Count)
                {
                    XmlNode compte = listeCompte[iNbc];
     
                    XmlNode num = compte.FirstChild;
                    XmlNode nom = num.NextSibling;
                    XmlNode solde = nom.NextSibling;
                    XmlNode decouvert = solde.NextSibling;
     
                    int iNum = Convert.ToInt32(num.InnerText);
                    double dSolde = Convert.ToDouble(solde.InnerText);
                    double dDecouvert = Convert.ToDouble(decouvert.InnerText);
     
                    tabcpt[iNbc] = new Compte();
                    tabcpt[iNbc].Init(iNum, nom.InnerText);
                    tabcpt[iNbc].Credit(dSolde);
                    tabcpt[iNbc].setDecouvert(dDecouvert);
                    iNbc++;
                }
    Et donc j'aimerais savoir quelle librairie XML est capable de me faire un peu près la meme chose, en C++ et si vous aurez des exemples ?

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Après avoir essayé dans les années passées bon nombre de bibliothèques et ne trouvant pas mon bonheur j'ai petit à petit réalisé une sur-couche à xerces-c.
    Ainsi avec xeumeuleu l'écriture donnerait :
    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
    xml::xofstream xos( "my_file.xml", xml::encoding( "iso-8859-1" ) );
    xos << xml::start( "repertoire" )
            << xml::start( "compte" )
              << xml::content( "num", 94 )
              << xml::content( "nom", "Batman" )
              << xml::content( "solde", 500000 )
              << xml::content( "decouvert", 500 )
            << xml::end()
            << xml::start( "compte" )
              << xml::content( "num", 92 )
              << xml::content( "nom", "Joker" )
              << xml::content( "solde", 25000 )
              << xml::content( "decouvert", 0 )
            << xml::end()
          << xml::end();
    Quant à la lecture ça donnerait quelque chose comme :
    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
    class my_class
    {
    public:
      void read()
      {
        xml::xifstream xis( "my_file.xml" );
        xis >> xml::list( "compte", *this, &my_class::read_compte );
      }
    private:
      void read_compte( xml::xistream& xis )
      {
        int num, solde, decouvert;
        std::string nom;
        xis >> xml::content( "num", num )
            >> xml::content( "solde", solde )
            >> xml::content( "decouvert", decouvert )
            >> xml::content( "nom", nom );
      }
    };
    J'ai mis ça dans une classe pour l'exemple mais il y a d'autres formes possibles pour la lecture d'une liste d'éléments, avec un foncteur par exemple (genre en utilisant boost::bind, ou pas), et donc avec une fonction libre.

    Je ne sais pas si ça ressemble à ce que tu cherches ?

    MAT.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Hmm je viens de relire ton message et je me suis un peu emballé, en fait tu cherches juste une bibliothèque "normale".
    Donc on trouve classiquement en C/C++ : xerces-c, libxml++, tinyxml, ..
    Tu peux sans doute en obtenir une liste plus complète en utilisant la fonction de recherche du forum.

    MAT.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Rassure-toi, j'ai utilisé la fonction recherche du forum et celle de google.
    Mais à vrai dire je n'ai pas trop été emballé par ces librairie (celles que tu m'a proposé), surtout xerces, que j'ai décidé de ne pas toucher.
    Ce que j'aimerais c'est des exemples et l'équivalent en C++ de mes codes C#, affiché plus haut, en utilisant Arabica, Poco C++ ou Reason C++

  6. #6
    Membre éclairé
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Par défaut
    J'ai utilisé Arabica dans un projet, et c'était avec XML++ l'une des libs XML des plus agréables à utiliser. (J'ai utilisé plus d'une lib pour mon projet, allez savoir pourquoi).
    En plus, c'est un "wrapper" sur d'autres libs XML (M$XML, libxml, expat, ...) ce qui permet de reduire les dépendances du code.

    Merci pour les liens vers Poco, Reasoning et xeumeuleu.

Discussions similaires

  1. Connaissez vous le code qui permet de selectionner des objets ?
    Par Boby71C dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2008, 09h22
  2. [DLL de compression/1.1] Connaissez-vous une librairie ou du code ?
    Par BillGates12345 dans le forum EDI/Outils
    Réponses: 1
    Dernier message: 26/07/2006, 13h52
  3. Connaissez vous un routeur pour ...
    Par loki dans le forum Développement
    Réponses: 3
    Dernier message: 18/09/2002, 09h05
  4. [langage] connaissez-vous autre chose que -d
    Par Sébastien dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 20h13

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