2009-10-09 9 views
2

J'ai vu quelques bibliothèques grâce à une recherche rapide sur Google. Quelle est généralement l'implémentation XML la plus couramment utilisée pour C++?Quelle est la bibliothèque XML la plus utilisée pour C++?

Je prévois d'utiliser XML comme moyen de configuration de programme. J'ai aimé XML parce que je vais utiliser sa structure arborescente. Si vous pensez avoir une solution plus appropriée pour cela, n'hésitez pas à le mentionner. Je veux quelque chose de léger et simple. Peut-être que XML est trop? Edit: Multi-plateforme serait préférable, mais pour répondre à une question, je suis en train de programmer cela sous Linux.

+0

Quelle plateforme avez-vous l'intention d'utiliser? // Buzzz – Buzzzz

+0

Linux, mais multiplateforme serait préférable. – Scott

+0

Cela ne devrait vraiment pas avoir d'importance, sauf si vous envisagez de recommander AsmXML: http://mkerbiquet.free.fr/asm-xml/ –

Répondre

2

Je recommande de ne pas utiliser XML. Je sais que c'est une question d'opinion mais XML encombre vraiment l'information avec beaucoup de balises. En outre, même s'il est lisible par l'homme, l'encombrement entrave la lisibilité (et je le dis par expérience puisque nous avons actuellement 134 fichiers de configuration XML ...). En outre, il est assez difficile à lire en raison du mélange entre les attributs et le texte brut. Vous ne savez jamais lequel vous allez avoir besoin.

Je recommanderais d'utiliser JSON, si vous voulez une langue qui a déjà des analyseurs bien définis.

Pour analyser, un simple coup d'œil à json.org et vous avez une longue liste de bibliothèques C++.

+0

L'utilisation ou non du xml dépend beaucoup de l'application et non du goût du programmeur. – lsalamon

+0

Si l'auteur voulait savoir répondre à ** votre ** question (Dois-je utiliser XML?) Il aurait posé cette question pas celle qu'il a posée. -1 –

+0

Piotr, en fait, j'ai laissé la question ouverte pour une réponse comme celle-ci. Lisez-le à nouveau. :) – Scott

3

Il y a plusieurs là-bas:

Xercers Big http://xerces.apache.org/xerces-c/ 
expat  small http://expat.sourceforge.net/ 

J'aime expat. Mais c'est une opinion totalement personnelle.
Je l'utilise car il est petit et il était simple d'écrire un wrapper C++ pour. Xerces est comme l'analyseur XML complet avec tous les boutons de sifflet. Mais par conséquent, il est légèrement plus complexe à utiliser.

+0

Peut expat écrire des fichiers XML? – Scott

+0

Expat est purement un analyseur - il lit l'entrée et appelle des rappels pour des types particuliers de syntaxe (élément, attribut, etc). Vous enregistrez les rappels pour les événements qui vous intéressent. Il s'agit d'un niveau similaire à SAX, mais il ne suit pas les conventions SAX. Il n'y a pas de support de sortie, mais la sortie est un travail plus simple de toute façon - bien qu'il y ait des problèmes évidents de jeu de caractères/d'encodage. – Steve314

7

Voir si TinyXML vous aide à

TinyXML est un simple, petit, analyseur XML C++ qui peut être intégrer facilement dans d'autres programmes.

+0

Il existe aussi une version plus conviviale C++, TiCPP. http://code.google.com/p/ticpp/ – Rob

+0

Avant de choisir TinyXML, jetez un coup d'œil à http://pugixml.org/benchmark.html. Je choisirais [pugixml] (http://pugixml.org/) une bibliothèque de traitement XML C++ légère. La bibliothèque est extrêmement portable, facile à intégrer et à utiliser! – sg7

1

Pas tout à fait la question que vous avez posée, mais il existe deux principales versions de parseurs XML, SAX et DOM.

Les analyseurs syntaxiques SAX sont des analyseurs pilotés par événements. Lorsque l'analyseur voit divers éléments avec le document XML (noeud, propriétés, etc.), l'analyseur appelle une fonction ou une méthode que vous avez définie. Par contre, les analyseurs DOM analysent l'ensemble du document XML et renvoient une structure arborescente qui représente le document entier. Votre code peut alors parcourir la structure dans n'importe quel ordre.

Les analyseurs SAX sont plus efficaces en mémoire car ils n'ont pas besoin de représenter le document entier en mémoire. Les analyseurs DOM sont plus faciles à utiliser car vous n'êtes pas limité au traitement du document de manière linéaire.

+0

Note utile - Expat ressemble à SAX dans ce schéma, mais n'est pas SAX. SAX était à l'origine une bibliothèque Java, mais son API est devenue le modèle d'une sorte de standard multilingue. Expat était toujours C, et (je pense) est antérieur à SAX. – Steve314

0

Je recommande fortement pugixml

« pugixml est une bibliothèque de traitement XML C++, qui se compose d'une interface de type DOM avec de riches fonctionnalités traversal/de modification, un analyseur XML extrêmement rapide qui construit l'arbre DOM à partir d'un XML fichier/buffer, et une implémentation de XPath 1.0 pour les requêtes arborescentes complexes pilotées par les données.Le support Unicode complet est également disponible, avec des variantes d'interface Unicode et les conversions entre les différents encodages Unicode. »

J'ai testé quelques parseurs XML dont quelques unes commerciales avant de choisir et d'utiliser pugixml dans un produit commercial.

pugixml était non seulement l'analyseur le plus rapide (parfois un peu plus rapide) mais aussi l'API la plus mature et la plus amicale, je la recommande fortement, c'est un produit très stable, je l'utilise depuis la version 0.8.

Le grand bonus de cet analyseur est l'implémentation de XPath 1.0! Le XPath est une fonction envoyée par Dieu!

Une interface de type DOM avec des capacités de traversée/modification riches est extrêmement utile pour s'attaquer à des fichiers XML «lourds» réels.

Il est petit et rapide analyseur. C'est un bon choix pour l'application iOS ou Android si cela ne vous dérange pas de lier le code C++.

J'ai également testé TinyXML. Ce n'était pas seulement plus lent mais il y avait des problèmes avec mes fichiers XML.

Repères dire beaucoup: http://pugixml.org/benchmark.html

0

Les bibliothèques XML que j'ai utilisé et UTILISIEZ sont encore:

Si vous n'avez pas besoin d'utiliser XML alors je vous suggère n'est pas en train de le faire. J'éviterais également de modéliser ce que vous lisez/écrivez en classes C++ à moins que vous n'utilisiez un générateur de code.

Je voudrais également regarder en utilisant un «schéma pour coder» générant pour la lecture/écriture, mais assurez-vous que la licence correspond à ce que vous faites.

Questions connexes