Encore un parser xml

Soyez le premier à donner votre avis sur cette source.

Vue 17 055 fois - Téléchargée 3 244 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
-
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
-
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
-
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
-
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.