Encore un parser xml

Soyez le premier à donner votre avis sur cette source.

Vue 17 447 fois - Téléchargée 3 295 fois

Description

Apres avoir utiliser TinyXml, je me suis penché sur l'utilisation des parser xml fournit sur cppfrance, mais aucun ne m'a satisfait.
Soit c'était trop complexe, soit pas compilable sur vc++ 6, ... brefle je me suis mis à faire le mien pour remplacer l'utilisation de la tinyxml que j'avais dans mon code.

alors, le parser gere ce type de code :
<?xml ... ?> // cette balise sera oublié
<ESSAI param="variable"/>
<!-- commentaire -->
<essai param1="blabla" >
<glop />
<![CDATA[
blablabla <a>sqdsdqsdsqdqsdqsdqs</a>]]></ESSAI>

donc il gere :
- l'imbriquation de balise
- les parametres d'une balise
- le fameux <![CDATA[ ... ]]> qui permet de ne pas analyser le contenu
- il permet grace à la classe CFileX (fournit dans une de mes sources) de charger un fichier xml sur le disque dur, http ou ftp

il n'y a pas de std::string ou vector ou map ou list ou autre d'utilisé, je ne le souhaitais pas.
il n'y a pas de fuite de mémoire

Source / Exemple :


// xml.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "xmlparser.h"

void enfant(CXmlNode *p) {
	while (p) {
		if (p->GetParentTag()) printf("[%s] -> [%s]\n",p->GetParentTag()->GetName(),p->GetName());
		else printf("[] -> [%s]\n",p->GetName());
		enfant(p->GetFirstTag());
		p = p->GetNextTag();
	}
}

int main(int argc, char* argv[])
{
	CXmlParser xml;

	int r=xml.Load("http://fr.gizmodo.com/rss20.xml");
	if (r == -1) return 0;

	enfant(xml.GetFirstTag());

	CXmlNode *rss = xml.GetFirstTag("rss");

	while (rss) {
		const char *v=rss->GetCharField("version");
		printf("[%s version = %s ]\n",rss->GetName(),v);
		CXmlNode *channel = rss->GetFirstTag("channel");
		while (channel) {
			printf("[%s] -> [%s] : %s\n",channel->GetParentTag()->GetName(),channel->GetName(),channel->GetText());
			channel = channel->GetNextTag("channel");
		}
		rss = rss->GetNextTag("rss");
	}

	return 0;
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
darkpoulpo Messages postés 76 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 29 novembre 2009
15 déc. 2006 à 01:09
voila c'est corrigé, merci
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
25 sept. 2006 à 21:03
Franchement pour de petits fichiers a parser ton code est excelent, au moins c'est pas une usine a gaz, c'est exactement ce que je voulait. Il y a juste un petit bug
<dialog type="bmp" path="theme1\"/> marche
<dialog type1="bmp" path2="theme1\"/> ne marchera pas a cause des chiffres en fait il s'arrete a type, voit que le signe suivant n'est pas "=" et renvois -1.
poireau2001 Messages postés 5 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 12 août 2006
12 août 2006 à 00:10
Le problème du c et du c++ est qu'il est difficelement explicable. Par conséquent impopulaire...

S'il vous plait, faites beaucoup plus de commentaires dans vos sources codes ! franchement, ça devient inexplicables parfois !!!!!!

Merci !
darkpoulpo Messages postés 76 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 29 novembre 2009
4 févr. 2006 à 23:13
veuillez recuperer la classe CFileX pour faire marcher le code. elle fait partit des sources dispo sur cppfrance

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.