Am besten die XML-Serialisierung Bibliothek für MFC-C++ - app
Ich habe eine Anwendung, geschrieben in C++ mit MFC und Stingray Bibliotheken. Die Anwendung arbeitet mit einer Vielzahl von großen Daten-Typen, die alle derzeit serialisiert basiert auf der MFC Document/View serialisieren von abgeleiteten Funktionen. Ich habe auch Hinzugefügt-Optionen für die XML-Serialisierung auf der Grundlage der Stingray-Bibliotheken implementiert DOM über die Microsoft XML SDK. Zwar leicht zu implementieren, die performance ist schrecklich, zu dem Ausmaß, dass es unbrauchbar ist, auf etwas anderes als sehr kleine Dokumente.
Was andere XML-Serialisierung-tools würden Sie Leute empfehlen, die für dieses Szenario. Ich will nicht DOM, wie es zu sein scheint ein Speicherfresser, und ich bin bereits Umgang mit große in-memory-Daten. Im Idealfall würde ich gerne eine streaming-parser, der ist schnell und einfach zu bedienen mit MFC. Meine aktuelle front runner ist expat das ist schnell und einfach, aber erfordert eine Menge von Klasse von Klasse Serialisierung-code Hinzugefügt werden. Alle anderen effizienter und einfacher zu implementieren sind alternativen da draußen, dass die Menschen empfehlen würde?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Boost-Serialisierung Bibliothek unterstützt XML. Diese Bibliothek besteht im wesentlichen aus in:
Unter den Verbesserungen, im Vergleich zu MFC-Unterstützung für XML.
Beachten Sie, dass Sie nicht unbedingt-Steuerelement das XML-schema dieser Serialisierung. Es verwendet sein eigenes schema.
Dies ist ein Alter altes problem. Ich war der Teamleiter das team mit den am meisten kritische Pfad-Abhängigkeiten auf dem größten software-Projekt der Welt in den Jahren 1999 und 2000 und genau dieses Problem war der Schwerpunkt meiner Arbeit während dieser Zeit. Ich bin davon überzeugt, dass das Rad erfunden wurde, der durch mehrere Ingenieure, die nicht bewusst waren, die andere schon erfunden. Das gleiche gilt für XML-Data binding in C++. Ich erfand es auch, und ich habe es perfektioniert wurde es seit über 10 Jahren an verschiedenen Projekten. Ich habe eine Lösung, behebt die Probleme, die hier genannten und einige weitere Probleme, die immer wieder auftauchen:
XML-Updates. Dies ist die Fähigkeit, re-wenden Sie eine Teilmenge von XML in eine bestehende Objekt-Modell. In vielen Fällen wird die XML gebunden ist indexierte Objekte und wir können uns nicht leisten, um re-index für jedes update.
COM-und CORBA-interface-management. In dem gleichen Respekt, dass die XML-Datenbindung werden automatisiert durch objektorientierte Verfahren - so können die Instanzen der interface-Objekte, die vorsehen, dass Daten an den application-layer.
State-Tracking. Die Anwendung muss Häufig unterscheiden, die einen leeren Wert im Vergleich zu einem missing-value - erstellen Sie eine leere Zeichenfolge. Dies bietet die Validierung zusammen mit Daten Verbindlich.
Den source-code verwendet wird die am wenigsten restriktive Lizenz - weniger, so dass GPL. Das Projekt wird getragen und verwaltet von hier:
http://www.codeproject.com/KB/XML/XMLFoundation.aspx
Nun, es ist das Jahr 2010, ich glaube, dass niemand sonst wird versuchen, das Rad neu zu erfinden, weil es ein paar zur Auswahl. IMHO - das Rad ist sehr Poliert und gut gerundet Umsetzung zur Verfügung.
Genießen.
Eine gute Lösung wäre,libxml. Es bietet leichte SAX Parsen und Daten-Strukturen für XML-Verarbeitung. Es gibt mehrere DOM-Bibliotheken, die gebaut oben auf der libxml.
Leider ist es eine C-Bibliothek, aber C++ Wrapper zur Verfügung stehen.
Vor ein paar Jahren wechselte ich von MSXML zu libxml, weil der performance-Probleme, die Sie erwähnt.
Wenn Sie sich entscheiden, libxml, sollten Sie auch einen Blick auf libxslt.
Verwenden wir Xerces-C++. Es war einfach zu setup und die performance ist gut genug, so dass wir nicht brauchen, zu denken, zu verändern. Aber wir sind nicht XML-schwer.
Ich hörte ein podcast von Scott Hanselman (aus Hänsel Minuten), wo Sie diskutieren die XML Leistung von MSXML und XSLT.
was RapidXML, ich benutze es in einer MFC-Anwendung mit einigen änderungen zur Unterstützung von UTF-16 mit std::string. Ich bin ganz zufrieden mit ihm so weit.
Das gSOAP toolkit automatisch serialisiert systemeigene C-und C++ - Daten zu/von XML-Format und unterstützt das vollständige XML-schema-Spezifikation durch XML-Datenbindungen:
gSOAP SourceForge-Projekt
Es hat sich seit 1999 zu einem deutlichen code-Basis mit den code generation tools und Bibliotheken. Es unterstützt viele databinding und der Anpassungs-features, die besonders kritisch für das mapping von XML-schema-Typen zu/von den C-und C++ - Typen. Es kann serialisieren beliebiger C/C++ - Typ und auch die STL-Container, container-Vorlagen und zyklische Datenstrukturen. Es wurde in der W3C-Schema-Muster für Databinding-Arbeitsgruppe (mit 100% - schema-Muster Abdeckung Erfolg seit Jahren). Es ist eine aktive open-source-Benutzer und der gSOAP-Entwicklung-Funktionalität wurde in vielen industriellen Projekten und Fortune-100-Unternehmen für die Entwicklung von SOAP/XML-Infrastrukturen.
Ist dies spät im Spiel, ich möchte nur erwähnen, dass wir auch LIBXML. Es ist robust und zuverlässig, und hat gut funktioniert. Ein bisschen zu low-level, werden Sie wollen, bauen einige Wrapper auf der Oberseite der Funktionen.
Zum Beispiel, erhalten Sie eine andere Reihenfolge der Funktion gibt je nachdem, ob Sie diese:
oder so:
Manchmal möchten Sie vielleicht, dass manchmal Sie don ' T care.
Verwenden wir TinyXML für alle unsere XML muss es sein, MFC oder direkt C++.
http://sourceforge.net/projects/tinyxml