C bibliothèque XML pour les Systèmes Embarqués
Je suis en train de travailler sur un projet pour un système embarqué qui utilise XML pour entrer des données dans et hors du système. Je ne veux pas le XML de la manutention de dégénérer en un tas de bits que construire des chaînes XML à l'aide de snprintf()
/strcat()
et amis ou parse XML par comptage "<
" et ">
" caractères.
J'ai trouvé plusieurs bibliothèques XML, un couple de ce qui pourrait même être assez petit, mais le plus proche qu'ils viennent C est le C++, ce qui n'est pas dans les cartes pour ce système. J'espère que je peux trouver une bibliothèque XML qui respecte les contraintes suivantes:
- Code source C
- pas d'allocation dynamique de la mémoire
- à bas prix. Gratuit est meilleur, mais le copyleft ne suffit pas.
Il n'a pas à être un analyseur complet - je veux juste être en mesure d'extraire du texte d'éléments imbriqués et ont une assez moyen simple de générer du code XML qui ne repose pas sur les chaînes de format. Les attributs ne sont pas utilisés (encore), de sorte que la bibliothèque n'a pas besoin de les soutenir même. Les documents XML sont assez petites, donc quelque chose qui est DOM-comme ce serait bien, aussi longtemps que il va travailler avec le client fourni tampons (parser le XML brut en place serait bien).
PugXML et TinyXML l'air d'être assez proche, mais je suis en espérant que quelqu'un là-bas sait à propos d'un XML lib adaptés pour C-systèmes embarqués à base de que mon googler est manquant.
- Il est possible que les auteurs de certains "copyleft" les bibliothèques pourraient être disposés et en mesure de vous vendre une alternative licence d'utilisation commerciale de leur code.
- Si j'étais dans votre position, en raison des contraintes des systèmes embarqués, je serais d'étudier sérieusement les alternatives à XML. En fonction de la nature des données, il pourrait y avoir de meilleures façons de les encapsuler les données qui ne nécessitent pas autant de la charge de traitement à la fois pour la génération et l'analyse.
- Nous avons eu la même situation et ne pouvais pas trouver toutes les petites lib, donc j'ai fini par écrire un pour système embarqué avec la taille du binaire < 20K mais il utilise des tas. Il prend en charge uniquement les caractères ASCII avec l'espace de noms. Souhaite que je pourrais vous aider, mais son propriétaire 🙁
- J'ai réalisé JSON est une bonne alternative et ne nécessitent nucht moins effert l'analyse de XML. Un analyseur ne serait pas que compicated à écrire et vous pourriez obtenir seulement le long avec de la pile, mais pas de tas facilement.
- J'ai essayé [ezxml ][1] il est très facile et parfait de la bibliothèque C pour système embarqué, vous pouvez utiliser à la fois pour la construction et l'analyse de XML [1]: ezxml.sourceforge.net
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas à propos de l'allocation de mémoire dynamique, mais un standard C analyseur XML est expat, qui est la bibliothèque sous-jacente pour un certain nombre d'analyseurs de là-bas.
XML_ParserCreate_MM
pour créer un parser, il va utiliser l'implémentation de malloc et free vous fournir.Je ne suis pas sûr, mais peut-être Mini-XML: XML Léger Bibliothèque vous aidera à:
Vous pouvez utiliser une ASN.1 XER codeur; il y en a un à http://lionet.info/asn1c/
Vous pouvez utiliser l'un de Gnome.
J'ai écrit sxmlc pour être aussi simple que possible et je sais que les gens l'utilisent dans les routeurs, à effectuer sur place l'analyse des requêtes web.
Malheureusement (et j'ai 5 ans de retard...), il utilise l'allocation de la mémoire, bien gardé au minimum: un tampon de lecture pour tous "XML ligne" (ce qui se trouve entre
<
et>
, désolé ;)), et de nombreuses petites tampon pour garder une trace du nom de la balise, les noms d'attributs et de valeurs, et le texte (bien que j'ai toujours voulu utiliserchar[16]
ou alors, pour ceux).Et il rend l'utilisation de
strdup
/strcpy
et ces.Que je veux que tout le monde peut l'utiliser librement, de la licence BSD.
Xerces-C de la bibliothèque serait optimale à utiliser, dans ce scénario.
Si il est va être assez petite XML, pourquoi ne pas générer par programmation, en utilisant sprintf ou d'autres choses et l'utilisation de la chaîne de l'extraction de fonctions pour analyser le même. Mais comme mentionné plus haut, si grand, suggère d'utiliser Xerces-c de la Bibliothèque, comme il est open source