Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2966 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Classe pour manipuler des XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Classe pour manipuler des XML

n°439386
haazheel
Posté le 25-06-2003 à 17:28:56  profilanswer
 

Salut,
 
alors voilà mon problème:
 
je dois manipuler trois types de XML
 
(Ex: http://oppc.free.fr/divers/contenu.xml
http://oppc.free.fr/divers/coucou3.xml
http://oppc.free.fr/divers/grebas.xml )
 
J'ai donc créé une classe qui me permette de naviguer dans le XML et de récupérer une valeur, un attribut, le nombre de noeuds enfants, et bien sûr de modifier ce XML.
 
En gros, je remplis une liste avec la suite des noeuds enfants sur lesquels je veux me diriger ( ex: 0,1,0,2 => 1er noeud enfant, puis 2ème, puis 1er, puis 3ème) puis quand je veux une valeur, je lance une fonction Get qui me récupère ce que je veux... (Ex: Get("toto" ) pour récupérer la valeur de l'attribut toto)
 
Le problème est que si je fais une erreur de frappe, ben ça merde lamentablement.
 
Donc je voulais savoir ce que vous me conseilliez:
 

  • utiliser une lib spéciale (si la "complexité" de mes XML est suffisante)
  • autre chose :D


Pour autre chose, voici ce qu'il est ressorti d'une discussion avec l'un d'entre vous:
 

  • Travailler avec des enum regroupant les noeuds possibles
  • Utiliser des arbres et map pour recréer la structure des XML


Vous en pensez quoi?
 
Merci d'avance!


---------------
Another .Net Blog
mood
Publicité
Posté le 25-06-2003 à 17:28:56  profilanswer
 

n°439392
VisualC++
J'va y penser ...
Posté le 25-06-2003 à 17:32:10  profilanswer
 

Y eu un sujet y a qq temsp de ca, mais sinon
 
TinyXML, Expat pour lib simple ou le poid lourd Xerces-C++

n°439419
haazheel
Posté le 25-06-2003 à 17:53:51  profilanswer
 

Non, c'est pas ça que je demandais...
 
J'utilise la lib XML de Borland pour ça...
 
Ce que je veux, c'est éviter de taper tout le temps les mêmes choses et de créer une classe pour simplifier tout ça...
 
Ex: XML->Push(1) à la place de _di_IXMLNode Node = Parent->ChildNodes->GetNode(1);
 
Mais ce qui me pose un cas de conscience, c'est pour la récupération d'un attribut...
 
Prenons le noeud suivant:
 

Citation :

<T3R Nom="Tir a 3 points reussi" Couleur="8421376" />


 
Si je veux récupérer la valeur de l'attribut Nom, pour l'instant je fais
 

Code :
  1. XML->Get("Nom" );


 
Mais imaginons que je ne me rende pas compte que j'ai tapé:
 

Code :
  1. XML->Get("nom" );


 
Ben là ça marche pas parce que nom n'est pas un attribut...
 
Donc ce que je voulais savoir, c'est comment résoudre ça...
 
Moi j'avais pensé à un enum pour chaque niveau de mon XML.
 
Par exemple pour le premier niveau de ce XML:
http://oppc.free.fr/divers/contenu.xml
 
J'ai soit Joueurs, soit Equipes, soit IndexCD
 
Je les met dans un enum qui represente le premier niveau, et je fais:
 

Code :
  1. XML->Get(Classe::Joueurs)


 
Comme ça ça permet de mieux gérer les erreurs et exceptions...
 
Ou bien on m'avait également parlé de créer un arbre + maps pour chaque XML qui serait une représentation de chaque structure de XML, ce qui empêcherait (normalement, pour ce que je m'y connais en maps et arbres) une erreur de ce type...
 
J'espère avoir été plus clair...


---------------
Another .Net Blog
n°439549
youdontcar​e
Posté le 25-06-2003 à 20:33:22  profilanswer
 

>> Ben là ça marche pas parce que nom n'est pas un attribut...
 
Pas compris ...
 
Pour le reste, il y a le xpath http://www.w3.org/TR/xpath.html qui te permet de rechercher une ou plusieurs nodes dans un document xml.
 
Plus qq exemples http://www.zvon.org/xxl/XPathTutor [...] mples.html

n°439608
haazheel
Posté le 25-06-2003 à 22:35:05  profilanswer
 

le nom de l'attribut est "Nom".
 
Or si je fais Get("nom" ), il me trouve pas l'atrribut à cause d'une faute de frappe...
 
Donc ce que je recherche, c'est un système me permettant de limiter au maximum les erreurs de ce type grâce à une liste de mots clés indiquant le noeud ou l'attribut à récupérer...


---------------
Another .Net Blog
n°439610
haazheel
Posté le 25-06-2003 à 22:36:23  profilanswer
 

Je viens de trouver qqch qui pourrait m'être utile: les multimap
 

Code :
  1. typedef multimap<AnsiString, AnsiString> Int2String;
  2. // Remplit une liste d?éléments pour ces maps :
  3. typedef list<pair<AnsiString, AnsiString> > lv;
  4. lv l;
  5. l.push_back(lv::value_type("Parent1", "Enfant1" ));
  6. l.push_back(lv::value_type("Parent1", "Enfant2" ));
  7. l.push_back(lv::value_type("Parent2", "Enfanta" ));
  8. l.push_back(lv::value_type("Parent2", "Enfantb" ));
  9. // Construit une map et l?initialise avec la liste :
  10. Int2String i2s(l.begin(), l.end());
  11. pair<Int2String::iterator, Int2String::iterator> p = i2s.equal_range("Parent1" );
  12. for (Int2String::iterator i = p.first; i != p.second; ++i)
  13.         ShowMessage(i->first + " : " + i->second);


 
Donc je pourrais peut-être remplir une multimap avec en mots-clés tous les noeuds du XML ayant des attributs, puis le nom des attributs en deuxième paramètre...
 
Vous en pensez quoi?


Message édité par haazheel le 25-06-2003 à 22:47:36

---------------
Another .Net Blog

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Classe pour manipuler des XML

 

Sujets relatifs
Redéfinition de classeRécupérer les paramètres de lancement du main ds une autre classe...
petit problème avec une classe PHPProblème d'intégrité de l'ASP dans un fichier XML
[C#] Créer un UserControl à partir d'une classeCannot view XML input using style sheet.
Manipuler une bd avec VC++[html/js] préchargement d'images d'une classe css ?
[XML] Pb de syntaxe....mysql VS XML
Plus de sujets relatifs à : Classe pour manipuler des XML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR