Ich suche einen einfachen, sauberen und korrekten XML-Parser für mein C++ - Projekt. Soll ich meine eigene schreiben?
Wie wäre es mit RapidXML ? RapidXML ist ein sehr schneller und kleiner XML-DOM-Parser, der in C++ geschrieben wurde. Es richtet sich in erster Linie an Embedded-Umgebungen, Computerspiele oder andere Anwendungen, in denen der verfügbare Arbeitsspeicher oder die CPU-Verarbeitungsleistung eine wichtige Rolle spielen. RapidXML ist unter der Boost Software License lizenziert und der Quellcode ist frei verfügbar.
Funktionen
Einschränkungen
Quelle: wikipedia.org://Rapidxml
Abhängig von Ihrer Verwendung können Sie eine XML-Datenbindung verwenden. CodeSynthesis XSD ist ein XML-Datenbindungscompiler für C++, der von Code Synthesis entwickelt und unter der doppelten Lizenz der GNU GPL und eine proprietäre Lizenz. Bei einer gegebenen XML-Instanzspezifikation (XML-Schema) werden C++ - Klassen generiert, die das angegebene Vokabular sowie den Parsing- und Serialisierungscode darstellen.
Eine der einzigartigen Eigenschaften von CodeSynthesis XSD ist die Unterstützung von zwei verschiedenen Zuordnungen von XML-Schema zu C++: speicherinternes C++/Tree und streamorientiertes C++/Parser. Das C++/Tree-Mapping ist ein traditionelles Mapping mit einer baumartigen In-Memory-Datenstruktur. C++/Parser ist ein neues, SAX-ähnliches Mapping, das die in XML-Instanzdokumenten gespeicherten Informationen als Hierarchie vokabularspezifischer Analyseereignisse darstellt. Im Vergleich zu C++/Tree können mit der C++/Parser-Zuordnung große XML-Dokumente verarbeitet werden, die nicht in den Arbeitsspeicher passen, eine streamorientierte Verarbeitung ausführen oder eine vorhandene speicherinterne Darstellung verwenden.
pugixml - Leichter, einfacher und schneller XML-Parser für C++ Sehr klein (vergleichbar mit RapidXML), sehr schnell (vergleichbar mit RapidXML), sehr einfach zu bedienen ( besser als RapidXML).
Probieren Sie TinyXML aus.
TiCPP ist eine "more c ++" Version von TinyXML.
'TiCPP' ist die Abkürzung für den offiziellen Namen TinyXML ++. Es ist eine völlig neue Schnittstelle zu TinyXML ( http://www.grinninglizard.com/tinyxml/ ), die VIELE der C++ - Stärken nutzt. Vorlagen, Ausnahmen und viel bessere Fehlerbehandlung. Es ist auch vollständig in Sauerstoff dokumentiert. Es ist wirklich cool, denn mit dieser Version können Sie winzige Benutzeroberflächen genauso wie zuvor erstellen oder die neuen 'Ticpp'-Klassen verwenden. Sie müssen lediglich TIXML_USE_TICPP definieren. Es wurde getestet in VC 6.0, VC 7.0, VC 7.1, VC = 8.0, MinGW gcc 3.4.5 und unter Linux GNU gcc 3+
versuchen Sie Folgendes: http://www.applied-mathematics.net/tools/xmlParser.html
Es ist einfacher und schneller als RapidXML oder PUGXML.
TinyXML ist der schlechteste "einfache Parser".
Verwenden Sie TinyXML nicht, wenn Sie sich Gedanken über die Effizienz/Speicherverwaltung machen (es weist häufig viele winzige Blöcke zu). Mein persönlicher Favorit ist RapidXML .
Wie wäre es mit gSOAP ? Es ist Open Source und unter der GPL-Lizenz frei verfügbar. Trotz seines Namens ist das gSOAP-Toolkit ein generisches XML-Datenbindungstool, mit dem Sie Ihre C- und C++ - Daten automatisch an XML binden können. Es ist nicht erforderlich, eine XML-Parser-API zu verwenden. Lassen Sie Ihre Daten einfach im XML-Format lesen/schreiben. Wenn Sie wirklich einen supereinfachen C++ - XML-Parser benötigen, ist gSOAP möglicherweise ein Overkill. Aber für alles andere hat es gut funktioniert, wie Testimonials für viele industrielle Anwendungen zeigen, seit gSOAP im Jahr 2001 eingeführt wurde.
Hier ist eine kurze Liste der Funktionen:
Zum Beispiel:
class Address
{
std::string name;
std::vector<LONG64> number;
time_t date;
};
Führen Sie dann "soapcpp2" für die obige Klassendeklaration Address
aus, um den XML-Reader und -Schreiber soap_read_Address
Und soap_write_Address
Zu generieren. Beispiel:
Address *a = new Address();
a = ...;
soap ctx = soap_new();
soap_write_Address(ctx, a);
soap_end(ctx);
soap_free(ctx);`
Dies erzeugt eine XML-Darstellung des Objekts Address a
. Durch Kommentieren der Header-Dateideklarationen mit XML-Namespace-Details (hier nicht gezeigt) generieren die Tools auch Schemas. Dies ist ein einfaches Beispiel. Die gSOAP-Tools können eine Vielzahl von C- und C++ - Datentypen verarbeiten, einschließlich zeigerbasierter verknüpfter Strukturen und sogar (zyklischer) Diagramme (anstatt nur Bäume).
Hoffe das hilft.
Ich bin ein C++ Neuling und nachdem ich ein paar verschiedene Vorschläge auf dieser Seite ausprobiert habe, muss ich sagen, dass ich pugixml am meisten mag. Es hat eine leicht verständliche Dokumentation und eine High-Level-API, nach der ich nur gesucht habe.
TinyXML eignet sich am besten für die einfache XML-Arbeit. Wenn Sie jedoch mehr Funktionen benötigen, probieren Sie Xerces aus dem Apache-Projekt aus. Auf der folgenden Seite erfahren Sie mehr über die Funktionen.
TinyXML und auch Boost.PropertyTree. Letzteres erfüllt nicht alle behördlichen Anforderungen, ist aber sehr einfach.
Ich mag den Gnome XML-Parser. Es ist Open Source (MIT-Lizenz, damit Sie es in kommerziellen Produkten verwenden können), schnell und verfügt über DOM- und SAX-basierte Schnittstellen.