2010-09-17 1 views
23

Ich bin nach einem sehr kleinen XML-Parser für ein eingebettetes Projekt. Es muss bis zu 10-15k kompilieren, muss nicht validiert werden und muss einfach und portabel sein.Gibt es einen guten kleinen XML-Parser für ein eingebettetes C-Projekt?

+2

ähnlich wie [ C XML-Bibliothek für Embedded System ] (http://stackoverflow.com/questions/1131701/c-xml-library-for-embedded-systems), obwohl ich sehe keine großen Antworten . –

+1

Ist XML eine absolute Voraussetzung? 15k ist ziemlich eng für etwas, das Sie nicht Hand-Roll, um Ihre Anforderungen zu erfüllen, aber ich wäre überrascht, wenn Sie nicht einen JSON-Parser von der Stange, die so klein wäre. – llasram

+1

Hallo llasram, danke für deinen Kommentar. Ja, XML ist eine Voraussetzung. Am Ende habe ich mein Problem gelöst, indem ich einen XML-Parser handle, der meine Anforderungen erfüllt. Der resultierende Code kam nur bei ein paar K an ... aber dann entpuppten sich meine XML-Parser-Anforderungen als ziemlich einfach, als ich sie genau studierte. – Joe

Antwort

5

Sie können immer Ihre eigene Implementierung rollen. Ich habe das vor ein paar Jahren gemacht und gerade jetzt eine Interface-Dokumentation zum Code unter mercurial.intuxication.org/hg/cstuff hinzugefügt.

Bitte beachten Sie, dass der Parser noch nie in einer Produktionsumgebung verwendet oder sogar mehr als nur rudimentär getestet wurde; Kommentare sind auch nicht existent, also haben Sie Spaß den Code zu grokken, wenn Sie ihn ändern müssen;)

+0

Danke Christoph. Genau das habe ich am Ende gemacht - Handrolle meine eigene Implementierung. Ich habe es tatsächlich vor deinem Post implementiert, aber trotzdem danke - ich schaue dir deine Implementierung an und vergleiche sie mit meinen eigenen. – Joe

+0

@Christoph, das sieht genau nach dem aus, was ich gesucht habe - danke, dass du es gepostet hast! – mikepurvis

7

Ich war in der Lage, die Kompilierungsflags der folgenden XML-Parser-Bibliotheken für C zu optimieren, und mehr als 50% gekürzt ihrer Größe auf meiner Ubuntu-Maschine. Mini-XML ist das einzige der Nähe, was Sie angefordert:

Es ist eine gute Diskussion hier:

C XML library for Embedded Systems

6

Ich suchte für einen vor kurzem und fand ich SimpleXML (http://simplexml.sourceforge.net/) und den etwas größeren sxmlc (http://sourceforge.net/projects/sxmlc/)

Ich finde SimpleXML mehr interessant, weil es einfacher ist, habe ich es nicht ausprobiert, aber es sieht aus wie es ist, was paßt ich im Sinne habe, ein einzelne Dateibibliothek (gut .h und .c), die keine exotischen XML-Funktionen unterstützt.

Der einfache XML-Parser ist ein kleiner Parser für eine Teilmenge von XML (alles außer Entitäten und Namespaces). Es verwendet eine einfache "Ein-Handler-pro-Tag" -Schnittstelle und ist für die Verwendung mit Geräten mit begrenzten Ressourcen geeignet.

1

Ich entwickelte sxmlc ("Simple XML in C") genau so zu sein: so wenig Dateien wie möglich. Es ist nur eine Datei mit einer optionalen "Such" -Datei, die Sie hinzufügen können, wenn Sie eine XPath-ähnliche Suche durch das Dokument benötigen.

Es behandelt DOM-style Laden (der gesamte Dokumentbaum im Speicher) oder SAX-style Laden (Aufruf von Rückrufen, wenn ein Knoten mit seinen Attributen gelesen wird, oder Text wurde auf einem Knoten gelesen). Wenn Speicher ein Problem ist, werden Sie sich für SAX interessieren.

Einige Leute waren auch an der Tatsache interessiert, dass es entweder Dateien oder Speicherpuffer analysieren kann (nützlich, wenn Sie XML als Web-Antwort erhalten).

Es behandelt Unicode-Dateien seit Version 4 bis #define, wenn Sie also kein Unicode benötigen, definieren Sie einfach nicht SXMLC_UNICODE und es wird keine Gewichtszunahme in der Binärdatei geben.

Ich muss auch sagen, es hält Kommentare beim Zurückschreiben von XML auf die Festplatte! Es hat mir immer leid getan, wenn die Leute Zeit damit verbringen, die Konfigurationssyntax in XML-Dateien zu erklären ("put 'true", um spezielle Komprimierung zu ermöglichen ... "), die gelöscht werden, wenn sie von der Anwendung zurückgespeichert werden.

Kompiliert unter Linux und Windows. Ich hatte ein gutes Feedback von Leuten, die es gerne in Router einbauten.

Da ich es so einfach wie möglich halten möchte, werde ich wahrscheinlich keine neuen Funktionen hinzufügen, sondern die bestehenden verbessern (und natürlich Fehler korrigieren! :)). Ich bin nicht sehr aktiv in seiner Entwicklung, wenn Fehler gemeldet werden.

4

Versuchen Sie yxml - es ist wirklich klein und schnell nicht validieren Parser.

Verwandte Themen