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?
Antwort
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;)
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
@Christoph, das sieht genau nach dem aus, was ich gesucht habe - danke, dass du es gepostet hast! – mikepurvis
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:
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.
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.
Versuchen Sie yxml - es ist wirklich klein und schnell nicht validieren Parser.
- 1. Gibt es einen guten Podcast über Nebenläufigkeit?
- 2. Gibt es einen guten UITabBarController Beispiel?
- 3. Gibt es einen guten JSP-Editor für Eclipse?
- 4. Gibt es einen guten Admin Generator für Ruby on Rails?
- 5. Gibt es einen guten Grund für Javascript inline zu sein
- 6. Gibt es ein eingebettetes Datenbank/Datei-Backup-Framework für Java?
- 7. Gibt es einen guten OpenCL-Wrapper für Ruby?
- 8. Gibt es einen guten MSSQL/SQL Server Adapter für sails.js?
- 9. Gibt es einen guten Fogbugz-Client für Mac OS X?
- 10. Gibt es einen guten Obfuscater für Perl-Code?
- 11. Gibt es einen guten 3d Software Renderer für Java?
- 12. Gibt es einen kostenlosen und guten Line-Profiler für PHP?
- 13. Gibt es einen guten NumPy-Klon für Jython?
- 14. Gibt es einen guten Fogbugz-Client für Windows
- 15. Gibt es einen guten ASP.NET-Mitgliedschaftsanbieter für Postgre SQL
- 16. Gibt es einen guten C++ - Code-Beautifier, geschrieben in Python?
- 17. Flash: Gibt es einen guten Grund, alles manuell zu machen?
- 18. Gibt es einen guten Open-Source-EDIFACT-Parser in Java?
- 19. Gibt es irgendwo einen guten Überblick über zend framework 2?
- 20. Gibt es einen guten WPF-Diagrammer/Toolkit/Provider?
- 21. Gibt es einen guten Grund, dass Setter.Value keine ContentProperty ist?
- 22. Beispiel für einen guten Webservice
- 23. Gibt es einen guten Vergleich von Doctrine vs Propel?
- 24. Datenbank für ein eingebettetes System
- 25. Gibt es einen guten Algorithmus für die Überprüfung auf Änderungen in Daten über einen bestimmten Zeitraum?
- 26. Gibt es einen Inhaltstyp für ein NRL?
- 27. Gibt es irgendwelche guten Ruby-Konsolen-Anwendungen?
- 28. Gibt es irgendwelche guten E-Commerce-Erweiterungen/Plugins für Umbraco?
- 29. Gibt es irgendwelche guten Unit-Test-Pakete für Excel
- 30. Gibt es irgendwelche guten Film/Film-APIs?
ä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 . –
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
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