Vous devriez essayer pugixml Analyseur XML léger, simple et rapide pour C++.
La plus belle chose à propos de pugixml est la fonction XPath ce qui manque à TinyXML et RapidXML.
Citant l'auteur de RapidXML "Je voudrais remercier Arseny Kapoulkine pour son travail sur pugixml, qui a été une inspiration pour ce projet" et "5% - 30% plus rapide que pugixml, le parseur XML le plus rapide que je connaisse" Il avait testé contre la version 0.3 de pugixml, qui a atteint récemment la version 0.42.
Voici un extrait de la documentation de pugixml :
Les principales caractéristiques sont les suivantes :
- faible consommation de mémoire et fragmentation (le gain par rapport à pugxml est de ~1,3 fois, TinyXML - ~2,5 fois, Xerces (DOM) - ~4,3 fois 1). Les chiffres exacts peuvent être vus dans la section Comparaison avec les analyseurs existants.
- vitesse d'analyse syntaxique extrêmement élevée (le gain par rapport à pugxml est de ~6 fois, TinyXML - ~10 fois, Xerces-DOM - ~17.6 fois 1
- une vitesse d'analyse syntaxique extrêmement élevée (bon, je me répète, mais il est si rapide qu'il surpasse Expat de 2,8 fois sur le XML de test) 2
- plus ou moins conforme à la norme (il analysera correctement tout fichier conforme à la norme, à l'exception des problèmes liés aux DTD)
- pratiquement insensible aux erreurs (il ne s'étouffera pas sur quelque chose comme You & Me, comme le fera expat ; il analysera les fichiers dont les données sont mal codées, etc.)
- interface propre (celle de pugxml fortement remaniée)
- plus ou moins conscient de l'Unicode (en fait, il suppose un encodage UTF-8 des données d'entrée, bien qu'il fonctionnera facilement avec ANSI - pas d'UTF-16 pour l'instant (voir Travaux futurs), avec des fonctions de conversion d'aide (UTF-8 <-> UTF-16/32 (quel que soit le défaut pour std::wstring & wchar_t))
- code C++ entièrement conforme aux normes (approuvé par Comeau en mode strict) ; la bibliothèque est multiplateforme (voir la référence pour la liste des plateformes)
- une grande flexibilité. Vous pouvez contrôler de nombreux aspects de l'analyse des fichiers et de la construction de l'arbre DOM par le biais d'options d'analyse.
Bon, vous vous demandez peut-être : quel est le piège ? Tout est si joli - c'est une solution petite, rapide, robuste et propre pour analyser le XML. Que manque-t-il ? Ok, nous sommes des développeurs honnêtes - alors voici une liste de défauts :
- la consommation de mémoire. Il bat tous les analyseurs DOM que je connais, mais quand l'analyseur SAX arrivera, il n'y aura aucune chance. Vous ne pouvez pas traiter un fichier XML de 2 Go avec moins de 4 Go de mémoire - et le faire rapidement. Bien que pugixml se comporte mieux que tous les autres parseurs basés sur DOM, donc si vous êtes coincé avec DOM, ce n'est pas un problème.
- la consommation de mémoire. Ok, je me répète. Encore une fois. Quand d'autres parsers vous permettent de fournir un fichier XML dans un stockage constant (ou même comme une zone de mémoire mappée), pugixml ne le fait pas. Vous devrez donc copier l'ensemble des données dans une zone de stockage non-constante. De plus, elles doivent persister pendant la durée de vie de l'analyseur (les raisons pour cela et plus sur les durées de vie sont écrites ci-dessous). Encore une fois, si vous êtes d'accord avec DOM - cela ne devrait pas être un problème, car la consommation globale de mémoire est moindre (bien que vous aurez besoin d'un morceau de mémoire contigu, ce qui peut être un problème).
- absence de validation, traitement des DTD, espaces de noms XML, traitement correct de l'encodage. Si vous en avez besoin, prenez MSXML, XercesC ou autre.
4 votes
Essayez Boost.PropertyTree . Vous pouvez trouver une brève introduction à la lecture/écriture de fichiers XML avec lui ici .