web-dev-qa-db-fra.com

Quel est le meilleur analyseur XML ouvert pour C ++?

Je recherche un analyseur XML simple, propre et correct à utiliser dans mon projet C++. Dois-je écrire le mien?

240
whaledawg

Que diriez-vous de RapidXML ? RapidXML est un analyseur DOM XML très rapide et de petite taille, écrit en C++. Il est principalement destiné aux environnements intégrés, aux jeux informatiques ou à toute autre application dans laquelle la mémoire disponible ou la puissance de traitement du processeur est primordiale. RapidXML est sous licence de logiciel Boost et son code source est disponible gratuitement.

Caractéristiques

  • Vitesse d'analyse (y compris la construction d'arborescence DOM) proche de la vitesse de la fonction strlen exécutée sur les mêmes données.
  • Sur un processeur moderne (à compter de 2008), le débit de l'analyseur est d'environ 1 milliard de caractères par seconde. Voir la section Performances dans le manuel en ligne.
  • Petite empreinte mémoire du code et des arbres DOM créés.
  • Une implémentation en-têtes uniquement, simplifiant le processus d'intégration.
  • Licence simple qui permet une utilisation à presque toutes les fins, commerciales ou non, sans aucune obligation.
  • Prend en charge les codages UTF-8 et partiellement UTF-16, UTF-32.
  • Code source portable sans autres dépendances qu'un très petit sous-ensemble de la bibliothèque standard C++.
  • Ce sous-ensemble est si petit qu'il peut facilement être émulé manuellement si l'utilisation de la bibliothèque standard n'est pas souhaitée.

Limitations

  • L'analyseur ignore les déclarations DOCTYPE.
  • Il n'y a pas de support pour les espaces de noms XML.
  • L'analyseur ne vérifie pas la validité des caractères.
  • L'interface de l'analyseur n'est pas conforme à la spécification DOM.
  • L'analyseur ne vérifie pas l'unicité des attributs.

Source: wikipedia.org://Rapidxml


Selon votre utilisation, vous pouvez utiliser une liaison de données XML? CodeSynthesis XSD est un compilateur XML Data Binding pour C++ développé par Code Synthesis et sous licence double sous le GNU GPL et une licence propriétaire. Avec une spécification d'instance XML (XML Schema), il génère des classes C++ qui représentent le vocabulaire donné ainsi que le code d'analyse syntaxique et de sérialisation.

L'une des caractéristiques uniques de CodeSynthesis XSD est la prise en charge de deux mappages XML Schema vers C++ différents: C++/arborescence en mémoire et C++/analyseur orienté flux. Le mappage C++/Tree est un mappage traditionnel avec une structure de données en mémoire en forme d'arborescence. C++/Parser est un nouveau mappage de type SAX qui représente les informations stockées dans les documents d'instance XML sous la forme d'une hiérarchie d'événements d'analyse propres au vocabulaire. En comparaison avec C++/Tree, le mappage C++/Parser permet de gérer des documents XML volumineux qui ne tiendraient pas dans la mémoire, d'effectuer un traitement orienté flux ou d'utiliser une représentation en mémoire existante.

Source: wikipedia.org://CodeSynthesis XSD

118
jk.

pugixml - Analyseur XML léger, simple et rapide pour C++ Très petit (comparable à RapidXML), très rapide (comparable à RapidXML), très facile à utiliser ( meilleur que RapidXML).

98
Zbyl
41
Rob

TiCPP est une version "plus c ++" de TinyXML.

'TiCPP' est l'abréviation du nom officiel TinyXML ++. C'est une interface complètement nouvelle pour TinyXML ( http://www.grinninglizard.com/tinyxml/ ) qui utilise BEAUCOUP des atouts C++. Modèles, exceptions et meilleure gestion des erreurs. Il est également entièrement documenté dans doxygen. C’est vraiment bien parce que cette version vous permet d’interfacer très exactement comme avant ou vous pouvez choisir d’utiliser les nouvelles classes 'ticpp'. Tout ce que vous avez à faire est de définir TIXML_USE_TICPP. Il a été testé dans VC 6.0, VC 7.0, VC 7.1, VC 8.0, MinGW gcc 3.4.5 et sous Linux. GNU gcc 3+

16
Kasprzol

essayez celui-ci: http://www.applied-mathematics.net/tools/xmlParser.html
C’est plus facile et plus rapide que RapidXML ou PUGXML.
TinyXML est le pire des "analyseurs simples".

14
Kat

N'utilisez pas TinyXML si vous êtes préoccupé par l'efficacité/la gestion de la mémoire (il a tendance à allouer beaucoup de petits blocs). Mon préféré est RapidXML .

12
yrp

Que diriez-vous de gSOAP ? Il est open source et disponible gratuitement sous licence GPL. Malgré son nom, la boîte à outils gSOAP est un outil de liaison de données XML générique qui vous permet de lier automatiquement vos données C et C++ à XML. Il n’est pas nécessaire d’utiliser une API d’analyseur XML, laissez-le simplement lire/écrire vos données au format XML pour vous. Si vous avez vraiment besoin d'un analyseur XML C++ ultra-simple, alors gSOAP est peut-être un peu excessif. Mais pour tout le reste, cela a bien fonctionné, comme en témoignent les témoignages relatifs à de nombreuses applications industrielles depuis l’introduction de gSOAP en 2001.

Voici une brève liste de fonctionnalités:

  • Portable: Windows, Linux, Mac OS X, Unix, VxWorks, Symbian, Palm OS, WinCE, etc.
  • Faible encombrement: code de 73 Ko et moins de 2 Ko de données pour implémenter une application client de service Web XML (pas de DOM pour limiter l'utilisation de la mémoire).
  • Rapide: ne croyez pas ce que prétendent les autres outils, la vitesse réelle doit être mesurée avec I/O. Pour gSOAP, il s'agit de plus de 3000 messages XML aller-retour sur TCP/IP. La surcharge d'analyse XML est négligeable car il s'agit d'un simple balayage linéaire de l'entrée/sortie alors que la (dé) sérialisation a lieu.
  • Prise en charge XML: importation/exportation de schéma XML (XSD), importation/exportation WSDL, espaces de noms XML, canonisation XML, XML avec pièces jointes (MIME), utilisation facultative de DOM, nombreuses options permettant de produire du XML avec indentation, utilisation de chaînes UTF8, etc.
  • Validation XML: partielle et complète (option)
  • Prise en charge de WS: WS-Security, WS-ReliableMessaging, WS-Addressing, WS-Policy, WS-SecurityPolicy et autres.
  • Débogage: gestion de la mémoire intégrée avec détection des fuites, journalisation.
  • API: aucune API à apprendre, uniquement l'initialisation du contexte du moteur "soap", puis utilisez l'interface de lecture/écriture pour vos données et la destruction du contexte du moteur "soap".

Par exemple:

class Address
{ 
  std::string name;
  std::vector<LONG64> number;
  time_t date;
};

Ensuite, exécutez "soapcpp2" sur la déclaration de classe Address ci-dessus pour générer le lecteur et le graveur soap_read_Address et soap_write_Address XML, par exemple:

Address *a = new Address();
a = ...;
soap ctx = soap_new();
soap_write_Address(ctx, a);
soap_end(ctx);
soap_free(ctx);`

Ceci produit une représentation XML de l'objet Address a. En annotant les déclarations de fichier d'en-tête avec les détails de l'espace de noms XML (non représentés ici), les outils génèrent également des schémas. Ceci est un exemple simple. Les outils gSOAP peuvent gérer une très large gamme de types de données C et C++, y compris des structures liées basées sur un pointeur et des graphes même (cycliques) (plutôt que de simples arbres).

J'espère que cela t'aides.

10
Bob

Je suis un débutant en C++ et après avoir essayé quelques suggestions différentes sur cette page, je dois dire que j'aime pugixml le plus. Il comprend une documentation facile à comprendre et une API de haut niveau, ce qui était tout ce que je cherchais.

9
godspeedelbow

TinyXML peut être préférable pour un travail XML simple, mais si vous avez besoin de plus de fonctionnalités, essayez Xerces à partir du projet Apache. Allez à la page suivante pour en savoir plus sur ses fonctionnalités.

http://xerces.Apache.org/xerces-c/

9
Raminder

TinyXML, et aussi Boost.PropertyTree. Ce dernier ne remplit pas toutes les exigences officielles, mais est très simple.

8
Lev

J'aime l'analyseur Gnome xml. Il est open source (licence MIT, vous pouvez donc l’utiliser dans des produits commerciaux), rapide et dispose d’interfaces basées sur DOM et SAX.

http://xmlsoft.org/

7
dicroce

Essayez TinyXML ou IrrXML ... Les deux sont des analyseurs syntaxiques XML légers (je vous conseillerais quand même d'utiliser TinyXML).

2
Prog