5

Je dois écrire une application linux C++ qui enregistre les paramètres au format XML (pour une édition facile) et communique également avec les applications existantes via des messages XML via des sockets et HTTP. Le problème est que je n'ai pas été capable de trouver des bibliothèques intelligentes pour m'aider, je n'ai pas vraiment envie d'écrire du code DOM ou SAX juste pour écrire et lire des messages très simples. Boost La sérialisation était presque une correspondance, mais elle ajoute beaucoup de données spécifiques au boost au xml qu'elle génère. Cela ne fonctionne évidemment pas bien pour les formats d'échange. Je me demande s'il est possible de faire en sorte que Boost Serialization ou une autre bibliothèque de sérialisation C++ génère un fichier XML propre. Cela ne me dérange pas s'il y a des attributs supplémentaires requis - comme un attribut de version, mais j'aimerais vraiment pouvoir contrôler leur nom et également se débarrasser des 'caractéristiques' que je n'utilise pas - tracking_level et class_id pour exemple.Sérialisation C++ Clean XML Similaire à XSTREAM

Idéalement, je voudrais juste avoir quelque chose de similaire à xstream en Java. Je suis conscient du fait que C++ manque d'introspection et qu'il est donc nécessaire de faire du codage manuel - mais ce serait bien s'il y avait une solution propre à lire et à écrire du simple XML sans kludges!

Si cela ne peut pas être fait, je suis également intéressé par des outils où le schéma XML est la ressource canonique (le contrat d'abord) - une bonne alternative JAXB au C++. Jusqu'à présent, j'ai seulement trouvé des solutions commerciales comme CodeSynthesis XSD. Je préférerais des solutions open source. J'ai essayé gSoap - mais il génère du code vraiment moche et il est aussi spécifique à SOAP.

En désespoir de cause, j'ai également commencé à chercher d'autres formats de sérialisation pour les protobuffers. Cela existe - mais seulement pour Java! Cela me surprend vraiment que les tampons de protocole semblent être un meilleur format d'échange de données pris en charge que XML. Je deviens fou juste de trouver des libs pour cette application et j'ai vraiment besoin de nouvelles idées. N'importe qui?

Répondre

0

Je ne suis pas sûr exactement ce qu'il fournit et donc si c'est ce que vous cherchez mais Qt a un module xml. Il a également un module de réseau qui sonne comme si cela pourrait vous être utile.

0

Pour approfondir la réponse de Troubadour, j'ai utilisé Qt's XML libraries avec beaucoup de succès pour faire quelque chose de très proche de ce que vous êtes. Dans mon cas, je sérialise les données de configuration dans un fichier local, puis les diffuse occasionnellement dans d'autres threads.

QXmlStreamWriter et QXmlStreamReader sont les deux classes en question. Here est un exemple les utilisant.

Pour ma propre sérialisation XML, j'ai un contrôle total sur le format réel produit et il n'a fallu que quelques centaines de lignes de code pour y parvenir. La meilleure chose que je peux dire à propos de l'utilisation de XML de Qt est que je peux me concentrer sur le contenu et laisser les bibliothèques faire le douloureux travail de baliser les données - ce qui est idéal.

Enfin, here est quelques informations sur les licences Qt (Commercial, GPL, LGPL).

0

Une citation de la question: "Jusqu'à présent, je n'ai trouvé des solutions commerciales comme CodeSynthesis XSD Je préférerais des solutions open source."

CodeSynthesis XSD peut être utilisé par des projets open source.Le produit a une licence commerciale exclusive mais en plus qu'il ont également une licence Open Source (version GPL 2 mais avec liberté supplémentaire donnée). Vous êtes autorisé à l'utiliser en même temps que tous « compatibles avec la GPL Licences de logiciels libres » et tous les « GPL-Incompatible gratuit Licences logicielles » figurant à http://www.gnu.org/licenses/license-list.html

La troisième option de licence pour CodeSynthesis XSD est un gratuit propriétaire Licence pour les petits vocabulaires. Vous pouvez utiliser gratuitement cette licence si vous utilisez un petit schéma XML.

En savoir plus sur les différentes licences CodeSynthesis XSD ici: http://www.codesynthesis.com/products/xsd/license.xhtml

En termes de fonctionnalité CodeSynthesis XSD prend également en charge sérialisation et l'analyse syntaxique d'un format binaire généré. Vous pouvez utiliser ce format pour une communication efficace.