esc - Beste XML-Serialisierungsbibliothek für eine MFC C++-App




2018 eurovision (8)

Ich habe eine Anwendung, geschrieben in C ++ mit MFC und Stingray-Bibliotheken. Die Anwendung arbeitet mit einer Vielzahl von großen Datentypen, die alle derzeit serialisiert sind, basierend auf MFC Document / View serialisierte abgeleitete Funktionalität. Ich habe auch Optionen für die XML-Serialisierung basierend auf den Stingray-Bibliotheken hinzugefügt, die DOM über das Microsoft XML SDK implementieren. Während es einfach ist, die Leistung zu implementieren, ist es schrecklich, in dem Ausmaß, dass es auf etwas anderem als sehr kleinen Dokumenten unbrauchbar ist.

Welche anderen XML-Serialisierungstools würden Sie für dieses Szenario empfehlen? Ich will DOM nicht, da es ein Gedächtnisschwund zu sein scheint, und ich beschäftige mich bereits mit großen Daten im Speicher. Im Idealfall möchte ich einen Streaming-Parser, der schnell und einfach mit MFC zu verwenden ist. Mein derzeitiger Spitzenreiter ist Expat, der schnell und einfach ist, aber viel Klasse für Klasse Serialisierungscode hinzufügen müsste. Irgendwelche anderen effizienten und einfacher zu implementierenden Alternativen da draußen, die Leute empfehlen würden?


Answers

Das gSOAP-Toolkit serialisiert native C- und C ++ - Daten automatisch von / nach XML und unterstützt die vollständige XML-Schema-Spezifikation durch XML-Datenbindungen:

gSOAP SourceForge Projekt

Es hat sich seit 1999 zu einer bedeutenden Codebasis mit Codegenerierungswerkzeugen und Bibliotheken entwickelt. Es unterstützt viele Datenbindungs- und Anpassungsfunktionen, was besonders wichtig für die Zuordnung von XML-Schematypen zu / von C- und C ++ - Typen ist. Es kann alle C / C ++ - Typen und auch STL-Container, Containervorlagen und zyklische Datenstrukturen serialisieren. Es wurde in der W3C Schema Patterns for Databinding-Arbeitsgruppe verwendet (mit 100% Schema-Musterabdeckung seit Jahren). Es gibt eine aktive Open-Source-Benutzerbasis und die gSOAP-Entwicklungsfunktionalität wurde in vielen Industrieprojekten und Fortune-100-Unternehmen verwendet, um SOAP / XML-Infrastrukturen zu entwickeln.


Eine gute Lösung wäre libxml . Es bietet leichte SAX-Parsing- und Datenstrukturen für die XML-Verarbeitung. Es gibt mehrere DOM-Bibliotheken, die auf libxml aufgebaut sind.

Leider ist es eine C-Bibliothek, aber C ++ - Wrapper sind verfügbar.

Vor ein paar Jahren bin ich von MSXML zu libxml gewechselt, wegen der erwähnten Leistungsprobleme.

Wenn Sie sich für libxml entscheiden, sollten Sie sich auch libxslt ansehen.


Was ist mit RapidXML? Ich verwende es in einer MFC-App mit einigen Modifikationen, um UTF-16 mit std :: string zu unterstützen. Ich bin damit bisher sehr zufrieden.


Wir verwenden Xerces-C ++ . Es war einfach einzurichten und die Leistung ist gut genug, so dass wir nicht über Änderungen nachdenken müssen. Wir sind jedoch nicht XML-schwer.

Ich habe mir einen Podcast von Scott Hanselman (aus Hansel Minutes ) angehört, in dem die XML-Performance von MSXML und XSLT diskutiert wird.



Das ist spät im Spiel, ich möchte nur erwähnen, dass wir auch LIBXML verwenden. Es ist robust und zuverlässig und hat gut funktioniert. Ein wenig zu niedrig, Sie wollen einige Wrapper über seine Funktionen erstellen.

Zum Beispiel erhalten Sie eine andere Reihenfolge der Funktionsrückgaben, je nachdem, ob Sie dies haben:

<tag attribute="value"/>

oder dieses:

<tag attribute="value"> </tag>

Manchmal mag es das, manchmal ist es dir egal.


Die Boost Serialization- Bibliothek unterstützt XML. Diese Bibliothek besteht im Wesentlichen aus:

  1. Beginnen Sie mit den Prinzipien der MFC-Serialisierung und nehmen Sie all die guten Dinge, die es bietet.
  2. Lösen Sie jedes einzelne Problem der MFC-Serialisierung!

Zu den Verbesserungen gegenüber MFC gehört die Unterstützung von XML. Beachten Sie, dass Sie das XML-Schema dieser Serialisierung nicht unbedingt steuern. Es verwendet ein eigenes Schema.


Um dies zu lösen, wird eine plattformspezifische Lösung benötigt. Suchen Sie nach opendir () unter Unix / Linux oder FindFirstFile () unter Windows. Oder es gibt viele Bibliotheken, die den plattformspezifischen Teil für Sie übernehmen.





c++ xml mfc