Quel est le meilleur analyseur XML ouvert pour C++? [dupliquer]

cette question a déjà une réponse ici:

je suis à la recherche d'un analyseur XML simple, propre et correct à utiliser dans mon projet C++. Dois-je écrire mon propre?

233
demandé sur peterh 2008-10-04 21:21:35

12 réponses

Que Diriez-vous de RapidXML ? RapidXML est un analyseur de DOM XML très rapide et petit écrit en C++. Il est destiné principalement aux environnements intégrés, jeux informatiques, ou toute autre application où la mémoire disponible ou la puissance de traitement CPU vient à une prime. RapidXML est sous licence Boost et son code source est disponible gratuitement.

Caractéristiques

  • vitesse d'analyse (y compris DOM tree) construction) approchant la vitesse de fonction strlen exécutée sur le même les données.
  • sur un CPU moderne (à partir de 2008) le le débit de l'analyseur est d'environ 1 milliard caractères par seconde. Voir La section Performance dans le Online Manuel.
  • Petite empreinte mémoire du code et créé des arbres DOM.
  • Un des en-têtes uniquement de la mise en œuvre, la simplification du processus d'intégration.
  • Licence Simple qui permet l'utilisation de presque n'importe quel but, à la fois commercial et non-commercial, sans aucune obligation.
  • supporte UTF-8 et partiellement UTF-16, Encodages UTF-32.
  • code source Portable Sans dépendances autres qu'une très petite 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 bibliothèque standard est indésirable.

Limitations

  • l'analyseur ignore DOCTYPE déclaration.
  • il n'y a pas de support pour les espaces de noms XML.
  • L'analyseur ne vérifie pas caractère de validité.
  • L'interface de l'analyseur ne pas conforme aux spécifications du DOM.
  • L'analyseur ne vérifie pas attribut de l'unicité.

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 synthèse de Code et double-licence sous GNU GPL et une licence exclusive. É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 l'analyse et code de sérialisation.

L'une des caractéristiques uniques de CodeSynthesis XSD est son support pour deux schémas XML différents à des mappages C++: en mémoire c++/Tree et en continu c++/Parser. La cartographie C++/Tree est une cartographie traditionnelle avec une structure de données en mémoire semblable à un arbre. C++ / Parser est un nouveau mappage de type SAX qui représente l'information stockée dans les documents D'instance XML comme une hiérarchie d'événements d'analyse spécifiques au vocabulaire. Par rapport à C++/Tree, le C++/Parser le mappage permet de traiter de grands documents XML qui ne s'inscrivent pas dans la mémoire, d'effectuer un traitement en flux ou d'utiliser une représentation en mémoire existante.

Source: wikipedia.org: / / CodeSynthesis XSD

117
répondu jk. 2008-10-04 21:30:24

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

89
répondu Zbyl 2016-07-07 03:31:19
40
répondu Rob 2008-10-04 17:22:55

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 plusieurs des forces de C++. Des modèles, des exceptions, et beaucoup mieux erreur de manipulation. Il est également entièrement documenté dans doxygen. Il est vraiment cool parce que cette version laissez-vous l'interface minuscule la même chose comme avant, ou vous pouvez choisir d'utiliser la nouvelle ticpp de classes. Tout ce que vous devez faire est de définir TIXML_USE_TICPP. Il a été testé en VC 6.0, VC 7.0, VC 7.1, VC 8.0, MinGW gcc 3.4.5, et en Linux GNU gcc 3 +

15
répondu Kasprzol 2008-10-04 18:27:22

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 du "simple parser".

14
répondu Kat 2010-08-18 09:55:15

ne pas utiliser TinyXML si vous êtes préoccupé par l'efficacité/gestion de la mémoire (il tend à allouer lots de petits blocs). Mon préféré est RapidXML .

12
répondu yrp 2008-10-04 19:48:09

et gSOAP ? Il est open source et disponible gratuitement sous licence GPL. Malgré son nom, la boîte à outils gSOAP est un outil générique de liaison de données XML et 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, il suffit de la laisser lire/écrire vos données au format XML pour vous. Si vous avez vraiment besoin d'un analyseur XML c++ super simple, alors gSOAP peut être un peu exagéré. Mais pour tout le reste, cela a bien fonctionné comme le montrent les témoignages pour de nombreuses applications industrielles depuis l'introduction du gSOAP en 2001.

Voici une brève liste des caractéristiques:

  • Portable: Windows, Linux, Mac OS X, Unix, VxWorks, Symbian, Palm OS, WinCE, etc.
  • petite empreinte: 73KO de code et moins de 2K de données pour mettre en œuvre une application client de service Web XML (pas de DOM pour limiter l'utilisation de la mémoire).
  • rapide: Ne croyez pas ce que d'autres outils réclament, la vraie vitesse devrait être mesurée avec I/O. pour gSOAP il est plus de 3000 roundtrip XML messages sur TCP / IP. Les frais généraux D'analyse XML sont négligeables puisqu'il s'agit d'un simple balayage linéaire de l'entrée/sortie pendant que la sérialisation (de)a lieu.
  • XML support: XML schema (XSD) import/export, WSDL import/export, XML namespaces, XML canonicalization, XML with attachments (MIME), optional use of DOM, many options to produce XML with indentation, use UTF8 strings, etc.
  • validation XML: partielle et complète (option)
  • WS support: WS-Security, WS-ReliableMessaging, WS-Addressing, WS-Policy, WS-SecurityPolicy, and other.
  • Débogage: mémoire intégrée de gestion avec la détection des fuites, de l'exploitation forestière.
  • API: aucune API à apprendre, seulement l'initialisation de contexte de moteur" soap", puis utiliser l'interface de lecture / écriture pour vos données, et la destruction de contexte de moteur" soap".

par exemple:

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

puis lancez "soapcpp2" sur la déclaration de classe Address ci-dessus pour générer le lecteur et l'écrivain 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'objet Address a . En annotant les déclarations du fichier d'en-tête avec les détails de l'espace de noms XML (non montré ici), les outils génèrent également des schémas. C'est un exemple simple. Le gSOAP les outils peuvent traiter 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 de simples arbres).

Espérons que cette aide.

10
répondu RAM 2018-07-24 13:07:38

TinyXML peut être le meilleur pour un travail XML simple, mais si vous avez besoin de plus de fonctionnalités, essayez Xerces du projet apache. Aller à la page suivante pour en savoir plus sur ses caractéristiques.

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

9
répondu Raminder 2008-10-04 17:30:15

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

9
répondu godspeedelbow 2010-09-09 11:45:13

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

8
répondu Lev 2008-10-04 18:49:23

j'aime L'analyseur Gnome xml. C'est open source (licence MIT, donc vous pouvez l'utiliser dans les produits commerciaux), rapide et a des interfaces basées sur DOM et SAX.

http://xmlsoft.org /

7
répondu dicroce 2008-10-04 17:59:51

Essayer TinyXML ou IrrXML ...Les deux sont des analyseurs XML légers (je vous suggérerais D'utiliser TinyXML, de toute façon ).

2
répondu Prog 2008-10-04 17:27:05