[irrlicht] Lire un fichier xml Difficulté : 16/100
Publié le 02/03/2008 à 19h 51min par Marco565



Interagir avec le XML dans mes programmes



Bonjour cet exercice vous montre comment récupéré des données contenues dans un fichier XML.

Requis
vous avez besoin d'un fichier xml en voici le contenu:

MyCarw.xml

Code : xml
  1. <?xml version="1.0"?>
  2.  
  3. <Cars>
  4. <voiture name="Speeder" puissance="450 ch" vmax="280.7" couple="420"/>
  5. <voiture name="Viper" puissance="678 ch" vmax="320.8" couple="720"/>
  6. </Cars>
  7.  
  8. <Garages>
  9. <garage localisation="Los Angoles" taille="600" placesLibres="4" revenuMensuel="9800.8" />
  10. <garage localisation="Paris" taille="1800" placesLibres="12" revenuMensuel="3800.3" />
  11. </Garages>



Cahier des charges
récupérer les informations du fichier xml et les affichier dans une cosole.

Aide
Pour vous aider, notament si vous n'avez jamais travaillé avec de l'xml voici un petit exemple ici

Correction
Si vous avez compris le principe (avec l'exemple) cela n'a du vous poser aucun probleme, sinon soyez attentif a la correction et essayer de le refaire plus tard (c'est comme sa qu'on progresse), bon assez parlé voici le code.

Code : cpp
  1. #include <iostream>
  2. #include <irr/irrlicht.h>
  3.  
  4. using namespace std;
  5. using namespace irr;
  6. using namespace io;
  7.  
  8. int main()
  9. {
  10. //On vas chercher le fichier xml
  11. IrrXMLReader* xml = createIrrXMLReader("MyCars.xml");
  12.  
  13.  
  14. //Si le fichier xml exite on le carcourt
  15. while(xml && xml->read())
  16. {
  17. //S'il y a des balises
  18. if(xml->getNodeType() == EXN_ELEMENT)
  19. {
  20. //On afiche la balise actuelle
  21. cout<<"Les nodes : "<<xml->getNodeData()<<endl;
  22.  
  23. ///Si le nom de la balise est "voiture" on la lis
  24. /*
  25. remarque: la fonction strcmp(char*, char*) sert a comparer
  26. les chaines si les chaines sont identiques elle renvoi 0
  27. */
  28. if (!strcmp("voiture", xml->getNodeName()))
  29. {
  30. //On recupere son nom (forme: char* )
  31. cout<<" Nom : "<<xml->getAttributeValue("name")<<endl;
  32. //On lis la puissance de la voiture (forme: char* )
  33. cout<<" Puissance : "<<xml->getAttributeValue("puissance")<<endl;
  34. //On lis sa vitesse maxi (forme: float)
  35. cout<<" Vitesse maxi : "<<xml->getAttributeValueAsFloat("vmax")<<" km/h"<<endl;
  36. //On lis le couple (forme: int)
  37. cout<<" Couple : "<<xml->getAttributeValueAsInt("couple")<<" Nm"<<endl<<endl;
  38. }
  39.  
  40. ///Pareil que pour les voitures sauf que ici ce sont des garages
  41. if(!strcmp("garage", xml->getNodeName()))
  42. {
  43. //On affiche la localisation du garage
  44. cout<<" Localisation : "<<xml->getAttributeValue("localisation")<<endl;
  45. //On affiche la taille du garage
  46. cout<<" Taille : "<<xml->getAttributeValueAsInt("taille")<<" m^2"<<endl;
  47. //On afiche le nombre de place libre dans le garage
  48. cout<<" Places libres : "<<xml->getAttributeValueAsInt("placesLibres")<<endl;
  49. //On affiche le revenu mensuel du garage
  50. cout<<" Revenu mensuel : "<<xml->getAttributeValueAsFloat("revenuMensuel")<<" $"<<endl<<endl;
  51.  
  52. }
  53.  
  54. }
  55.  
  56. }//fin du parcut des fichier
  57.  
  58.  
  59. system("PAUSE");
  60. return 0;
  61. }
  62.  



Avec ce code vous pouvez exporter tout types de donnes contenu dans les fichier XML (int, float, et surtout les chaines de caractere)