[bibliothèque C++] XmlFile
| shadosan |
Posté le 17 Déc 2007 à 19:53
|
|
![]() Messages : 194 GCPoints : 8461 |
Bonjour, Je suis en train de développer une bibliothèque de gestion de fichier XML, codé en C++ ! Qu'est-ce que le XML ? le XML permet d'organiser ses données, sous forme de balises (nommé élément), qui peux avoir le nom que vous voulez. Ces éléments peuvent à leur tour contenir d'autres éléments, et ainsi de suite, et chaque élément peuvent contenir des données ou information, si vous voulez. un petit exemple de fichier XML conforme : Code : <?xml version="1.0" encoding="ISO-8859-1"?> <programme numero="0"> <nom>Kiroxx 1.0a</nom> <info>il est pas fiable :-P</info> <auteur> <nom>Kevin</nom> <age>14</age> </auteur> </programme> La bibliothèque contiendra une petite documentation et quelques exemples pour se familiariser avec elle :-) Je l'ai presque fini, il me reste que la gestion du chargement des fichiers à faire ^^ (autrement dit, 5% restant) Je vous en reparle bientôt ! EDIT : Voilà, j'ai *enfin* fini la version 1.0; vous pouvez la trouver sur mon site : http://open-maker.tuxfamily.org/ (lisez la news, tiens :-P)
Dernière édition le 26 Jan 2008 à 01:15
|
|
| stilobique |
Posté le 17 Déc 2007 à 20:01
|
|
![]() Messages : 2387 GCPoints : 841900 |
Coder avec qu'elle langage et bibliothèque ? Et surtout euh... on peut l'utiliser pour quoi ?? | |
| shadosan |
Posté le 17 Déc 2007 à 20:18
|
|
![]() Messages : 194 GCPoints : 8461 |
ah ouais, j'ai oublié de préciser qu'il est codé en c++, avec la bibliothèque standard (std). on l'utilise d'habitude pour organiser dans un fichier (ou seulement dans la mémoire) des informations pour un programme, ou un site web qui en aurais de besoin... |
|
| Daru13 |
Posté le 17 Déc 2007 à 20:25
|
|
![]() Messages : 2884 GCPoints : 108090 |
ça a l'air sympa |
|
| stilobique |
Posté le 17 Déc 2007 à 20:31
|
|
![]() Messages : 2387 GCPoints : 841900 |
C'est assez intéressant, on peut donc rapidement mettre en place un moyen pour créer un fichier XML de sauvegarde pour un jeu par exemple (corrige si je me trompe |
|
| shadosan |
Posté le 17 Déc 2007 à 20:43
|
|
![]() Messages : 194 GCPoints : 8461 |
ouep c'est ça sauvegarder ses maps, les info de joueurs, les highscores, l'alignement des menus dans une interface comme Wxwidget, Qt ou autre, permettre à un programme d'être multi-language sans recompiler à chaque fois, et j'en passe (tout reste au choix du programmeur) |
|
| Darktib |
Posté le 17 Déc 2007 à 20:54
|
|
![]() Messages : 4017 GCPoints : 347288 |
Elle a l'air sympa ta bibliotheque. Ca pourra m'etre utile dans mon jeu ^^ Le xml c'est pratique, mais quelles sont les performances de ta bibliotheque? |
|
| stilobique |
Posté le 17 Déc 2007 à 20:59
|
|
![]() Messages : 2387 GCPoints : 841900 |
Petite question, la bibliothèque standard sa correspond à quoi ? Parce que si il s'agit des DLL de Windows cela signifie que ce n'est pas portable... | |
| Darktib |
Posté le 17 Déc 2007 à 21:00
|
|
![]() Messages : 4017 GCPoints : 347288 |
La bibliotheque standard std est multi-plateforme. Ce n'est pas une dll windows. |
|
| shadosan |
Posté le 17 Déc 2007 à 21:03
|
|
![]() Messages : 194 GCPoints : 8461 |
je testerai ça quand je l'aurai fini, avec un fichier xml de plusieur Mo, que je vais créer de toute pièce. Mais ça m'étonnerais pas qu'elle est des perf correct... |
|
| Darktib |
Posté le 17 Déc 2007 à 21:06
|
|
![]() Messages : 4017 GCPoints : 347288 |
Le probleme du xml c'est que n'importe qui peut changer les infos qui sont dedans. Et aussi voir les données. |
|
| stilobique |
Posté le 17 Déc 2007 à 21:07
|
|
![]() Messages : 2387 GCPoints : 841900 |
il doit être possible de crypter les données par la suite non ? | |
| Darktib |
Posté le 17 Déc 2007 à 21:15
|
|
![]() Messages : 4017 GCPoints : 347288 |
surement, mais dans ce cas la il faut décrypter le fichier, puis loader le xml. Autrement dit c'est plus lent... |
|
| shadosan |
Posté le 17 Déc 2007 à 21:21
|
|
![]() Messages : 194 GCPoints : 8461 |
Citation :
on a rien sans rien ;-) et puis, dans la création d'un jeu, je suis contre d'empêcher à l'utilisateur de modifier les fichiers du jeu, SAUF si c'est un jeu multijoueur, ou qui a des possibilité de multijoueur. on pourrait dire "le bouclier attire l'épée", ou si vous voulez, "le fichier crypté attire le crackeur"
Dernière édition le 17 Déc 2007 à 21:23
|
|
| Mod |
Posté le 17 Déc 2007 à 21:26
|
|
![]() Messages : 4954 GCPoints : 2100823 |
C'est aussi un avantage : les données sont claires et nettes, et simples à éditer :). [Edit] Cinq minutes pour écrire ce message et une réponse en plus ^^'.
Dernière édition le 17 Déc 2007 à 21:27
|
|
| Darktib |
Posté le 17 Déc 2007 à 21:30
|
|
![]() Messages : 4017 GCPoints : 347288 |
Quand est-ce que tu mettra ta bibliotheque en ligne ? Et au fait, c'est quoi son ptit nom ? |
|
| shadosan |
Posté le 17 Déc 2007 à 21:34
|
|
![]() Messages : 194 GCPoints : 8461 |
1. je sais pas trop, mais dans moins d'une semaine, si tout vas bien ;-) 2. XmlFile |
|
| shadosan |
Posté le 13 Jan 2008 à 22:42
|
|
![]() Messages : 194 GCPoints : 8461 |
comme vous vous en doutiez surement, j'ai pas beaucoup développer durant le temps des fêtes, et donc j'ai pris du retard. Par contre, vue que maintenant je n'ai plus de prétextes pour faire mon paresseux j'ai amélioré les perfs de beaucoup; si avant ça prenait 4 min (!!!) charger en mémoire 90,000 éléments XMLien, maintenant ça prend ... 1 seconde et demi quelques petit exemple d'utilisation du code (qui ne devrais pas changer d'ici la Release) : pour charger un fichier XML en C++, il faut faire ceci : Code : XmlFile xfile("test.xml");ou bien : Code : XmlFile xfile; xfile << "test.xml"; ou bien : Code : XmlFile xfile;
xfile.load("test.xml");NB : il n'accepte pas de fichier non-xml, et accepte les fichier xML, XmL, XMl, etc peu importe comment il est écrit. pour sauvegarder le fichier : Code : XmlFile xfile; xfile >> "test.xml"; ou bien : Code : XmlFile xfile;
xfile.save("test.xml");vue que toute action fait sur une classe d'xml peut produire une exception de type std::string, c'est toujours bon d'entourer les commandes par un block "try catch" : Code : try {
XmlFile xfile("test.xml");
// mes autres trucs lié au xml
catch (std::string erreur) {
std::cout << endl << erreur << endl;
}mais vous n'etes pas obligé, si vous savez se que vous faites ! ---------------------------------------- Mini-tutoriel express sur le XML il faut savoir qu'un fichier XML est composé d'éléments, ayant chacun leur nom, et facultativement une valeur et une liste d'attribues (autant que vous voulez, même zéro) qui ont chacun un nom et une valeur. un bref exemple : Code : <monElement unAttribue="valeur de l'attribue">ma valeur !!!!</monElement> NB : les règles de nommage d'éléments ou d'attribue sont : - peut contenir des lettres et des chiffres seulement(les espaces ne sont pas autorisés); - ne doit pas commencer par un chiffre ou un caractère ponctué; - ne doit pas commencer par "xml"; - attentif à la casse. Un fichier XML doit avoir un seul élément "racine" (root). Tout autres éléments ajouté doivent être dedans l'élément principal. Il n'as de nom particulier à avoir, laissez aller votre imagination ^^ Ensuite, il faut savoir qu'un élément peux contenir autant d'éléments que vous voulez ! Eux-même pouvant contenir autant d'élément désiré, ad vitam aeternam. Code : <root>maValeur <note id="1" type="email" oui="non"> <to>Tove <last_name>Dupuis</last_name> <job>tech</job> </to> <from>John</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> </root> Dans l'exemple, root contient seulement note, qui lui contient to, from, heading et body. to contient last_name et job. Et voila, je crois avoir fait le tour du XML ! ^^ c'est pas vraiment compliqué, non ? ---------------------------------------- La bibliothèque contient 4 classes : - XmlPath : s'occupe de s'assurer que le chemin, lors sur chargement ou de la sauvegarde, est valide. - XmlAttribute : représente un attribue. - XmlElement : représente un élément. - XmlFile : représente un fichier XML. La classe hérite de XmlElement, donc XmlFile est aussi un élément (l'élément "racine", pour ainsi dire) pour présenter XmlPath, je vais reprendre l'exemple fait un peu plus tôt : Code : XmlFile xfile("test.xml");qui est, en passant, l'équivalent de : Code : XmlFile xfile(XmlPath("test.xml"));et... ma foi, ya pas grand choses à dire sur XmlPath ^^ bien sur, on peux obtenir ou modifier le chemin qu'il contient. pour présenter le reste en condensé, Code : XmlFile xfile; on vas lui donner un nom personalisé (son nom par défaut est "root"). le nom n'est le nom du fichier, seulement le nom de l'élément principal : Code : xfile.setName("body");on vas lui ajouter un élément, nommé "a", avec comme valeur "un petit lien !" : Code : xfile << XmlElement("a","un petit lien !");NB: il y a une autre manière d'ajouter un élément, mais elle est plus longue à écrire, et porte à confusion : Code : xfile.addElement(XmlElement("a","un petit lien !"));ensuite, on aimerais lui donner un attribue nommé "href" avec comme valeur "http://www.google.com" : Code : xfile["a"] << XmlAttribute("href","http://www.google.com");NB: il y a une autre manière de chercher un élément (qui est aussi dispo pour chercher un attribue), et propose un avantage non négligeable (mais facultatif) qui est de pouvoir chercher le Xème élément / attribue ayant le nom donné ! Ici, je cherche le 1er élément ayant le nom "a" et je lui ajoute l'attribue (de la manière facultative, mais la manière proposé précédemment fonctionnerais) : Code : xfile.getElement("a",1).addAttribute(XmlAttribute("href","http://www.google.com"));Code : xfile.getElement("a",1) << XmlAttribute("href","http://www.google.com");pour abréger, sauvegardont et voyont le résultat : Code : <body> <a href="http://www.google.com">un petit lien !</a> </body> Je vous reviendrez avec la bibliothèque complété ! EDIT : et hop, 35.8 GCPoints !
Dernière édition le 14 Jan 2008 à 16:53
|
|
| Daru13 |
Posté le 13 Jan 2008 à 23:13
|
|
![]() Messages : 2884 GCPoints : 108090 |
Citation :
Dès que j'ai vu ton message, je me suis tout de suite dit " T'ain combien de points y s'est raflé là !? Sinon j'ai pas tout lu, mais le XML ça sert à quoi en gros A creer ses propres balises ( style XHTML ) d'accord, mais dans quel but |
|
| stilobique |
Posté le 13 Jan 2008 à 23:23
|
|
![]() Messages : 2387 GCPoints : 841900 |
Daru13 a écrit : Justement, le but c'est toi qui te le fixe, sa permet par exemple de sauvegarder les données plutôt que dans une base de données, ou alors on peut écrire des coordonnées... bref on en fait se que l'on veut. |
|









