Encore un parser xml

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

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.