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

Je cherche un parsingur XML simple, propre et correct à utiliser dans mon projet C ++. Devrais-je écrire le mien?

Qu’en est-il de RapidXML ? RapidXML est un parsingur XML DOM rapide et petit écrit en C ++. Il est principalement destiné aux environnements embarqués, aux jeux sur ordinateur ou à toute autre application où la mémoire disponible ou la puissance de traitement du processeur est très élevée. RapidXML est sous licence Boost Software License et son code source est librement disponible.

Caractéristiques

  • Vitesse d’parsing (y compris l’arborescence DOM) vitesse proche de la fonction strlen exécutée sur les mêmes données.
  • Sur un processeur moderne (à partir de 2008), le débit de l’parsingur 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 arborescences DOM créées.
  • Une implémentation des en-têtes uniquement, simplifiant le processus d’intégration.
  • Licence simple qui permet une utilisation à des fins presque commerciales, non commerciales, sans aucune obligation.
  • Prend en charge les codages UTF-8 et partiellement UTF-16, UTF-32.
  • Code source portable sans dépendance autre qu’un très petit sous-ensemble de la bibliothèque standard C ++.
  • Ce sous-ensemble est si petit qu’il peut être facilement émulé manuellement si l’utilisation de la bibliothèque standard est indésirable.

Limites

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

Source: wikipedia.org://Rapidxml


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

L’une des caractéristiques uniques de CodeSynthesis XSD est sa prise en charge de deux mappages XML Schema vers C ++ différents: C ++ / Tree en mémoire et C ++ / Parser orienté stream. Le mappage C ++ / Tree est un mappage traditionnel avec une structure de données en mémoire arborescente. 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’parsing de vocabulaire spécifiques. En comparaison avec C ++ / Tree, le mappage C ++ / Parser permet de gérer des documents XML volumineux qui ne rentrent pas dans la mémoire, d’effectuer un traitement orienté stream ou d’utiliser une représentation en mémoire existante.

Source: wikipedia.org://CodeSynthesis XSD

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

TiCPP est une version “plus c ++” de TinyXML.

‘TiCPP’ est l’abréviation du nom officiel TinyXML ++. C’est une toute nouvelle interface pour TinyXML ( http://www.grinninglizard.com/tinyxml/ ) qui utilise BEAUCOUP de points forts du C ++. Modèles, exceptions et beaucoup mieux gérer les erreurs. Il est également entièrement documenté dans doxygen. C’est vraiment cool parce que cette version vous permet de faire une interface minuscule exactement de la même manière qu’auparavant ou vous pouvez choisir d’utiliser les nouvelles classes ‘ticpp’. Tout ce que vous devez 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 dans Linux GNU gcc 3+

essayez celui-ci: http://www.applied-mathematics.net/tools/xmlParser.html
c’est plus simple et rapide que RapidXML ou PUGXML.
TinyXML est le pire de “l’parsingur simple”.

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 .

Que diriez-vous de gSOAP ? Il est open source et disponible gratuitement sous licence GPL. Malgré son nom, le toolkit gSOAP est un outil de liaison de données XML générique et vous permet de lier automatiquement vos données C et C ++ à XML. Il n’est pas nécessaire d’utiliser une API d’parsing XML, laissez-le simplement lire / écrire vos données au format XML pour vous. Si vous avez vraiment besoin d’un parsingur XML C ++ super simple, alors gSOAP peut être excessif. Mais pour tout le rest, cela a bien fonctionné, comme en témoignent de nombreuses applications indussortingelles 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 les E / S. Pour gSOAP, il y a plus de 3000 messages XML aller-retour sur TCP / IP. La surcharge d’parsing XML est négligeable, car il s’agit d’une parsing linéaire simple de l’entrée / sortie pendant la sérialisation (de).
  • Prise en charge XML: importation / exportation de schémas XML (XSD), importation / exportation WSDL, espaces de noms XML, canonisation XML, XML avec pièces jointes (MIME), utilisation facultative de DOM, nombreuses options pour générer du code XML avec indentation, chaînes UTF8, etc.
  • Validation XML: partielle et complète (option)
  • Prise en charge 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 de fuite, journalisation.
  • API: pas d’API à apprendre, seulement l’initialisation du contexte du moteur “soap”, puis utilisation de l’interface lecture / écriture pour vos données, et destruction du contexte du moteur “soap”.

Par exemple:

class Address { std::ssortingng name; std::vector number; time_t date; }; 

Exécutez ensuite “soapcpp2” sur la déclaration de la classe Address ci-dessus pour générer le soap_read_Address et le soap_write_Address XML soap_read_Address et soap_write_Address , par exemple:

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

Cela produit une représentation XML de l’ Address a object. En annotant les déclarations du 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 un très large éventail de types de données C et C ++, y compris des structures liées basées sur des pointeurs et même des graphiques (cycliques) (plutôt que des arbres).

J’espère que cela t’aides.

TinyXML peut être le meilleur pour le 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/

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 le plus le pugixml . Il est facile de comprendre la documentation et une API de haut niveau, tout ce que je cherchais.

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

J’aime l’parsingur XML Gnome. C’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/

Essayez TinyXML ou IrrXML … Les deux sont des parsingurs XML légers (je vous suggère d’utiliser TinyXML, de toute façon).