open-source xerces - Was ist der beste offene XML-Parser für C++?




windows 3.2 (11)

Diese Frage hat hier bereits eine Antwort:

Ich suche nach einem einfachen, sauberen, korrekten XML-Parser, um in meinem C ++ Projekt zu verwenden. Soll ich mein eigenes schreiben?


Answers

Wie wäre es mit gSOAP ? Es ist Open Source und frei verfügbar unter der GPL-Lizenz. Trotz seines Namens ist das gSOAP-Toolkit ein generisches XML-Datenbindungswerkzeug und erlaubt Ihnen, Ihre C- und C ++ - Daten automatisch an XML zu binden. Sie müssen keine XML-Parser-API verwenden, sondern lassen Sie Ihre Daten einfach im XML-Format für Sie lesen / schreiben. Wenn Sie wirklich einen super-einfachen C ++ XML-Parser brauchen, dann ist gSOAP vielleicht ein Overkill. Aber für alles andere hat es funktioniert, wie Testimonials für viele industrielle Anwendungen zeigen, seit gSOAP im Jahr 2001 eingeführt wurde.

Hier ist eine kurze Liste von Funktionen:

  • Portabel: Windows, Linux, Mac OS X, Unix, VxWorks, Symbian, Palm OS, WinCE usw.
  • Geringer Platzbedarf: 73 KB Code und weniger als 2 KB Daten zum Implementieren einer XML-Webdienst-Client-App (kein DOM zur Begrenzung der Speicherbelegung).
  • Schnell: Glauben Sie nicht, was andere Tools behaupten, die wahre Geschwindigkeit sollte mit I / O gemessen werden. Für gSOAP sind es über 3000 Roundtrip-XML-Nachrichten über TCP / IP. XML-Parsing-Overhead ist vernachlässigbar, da es sich um einen einfachen linearen Scan der Eingabe / Ausgabe während der (De-) Serialisierung handelt.
  • XML-Unterstützung: XML-Schema (XSD) -Import / -export, WSDL-Import / Export, XML-Namespaces, XML-Kanonisierung, XML mit Anhängen (MIME), optionale Verwendung von DOM, viele Optionen zum Erzeugen von XML mit Einzug, UTF8-Strings usw.
  • XML-Validierung: teilweise und vollständig (Option)
  • WS-Unterstützung: WS-Sicherheit, WS-ReliableMessaging, WS-Adressierung, WS-Richtlinie, WS-SecurityPolicy und andere.
  • Debugging: Integrierte Speicherverwaltung mit Lecksuche, Protokollierung.
  • API: keine API zu lernen, nur Engine-Kontext Initialisierung "Soap", dann verwenden Sie die Lese- / Schreib-Schnittstelle für Ihre Daten und "Soap" Engine Kontext Zerstörung.

Beispielsweise:

class Address { std::string name; std::vector<LONG64> number; time_t date; };

Führen Sie dann "soapcpp2" in der obigen soap_read_Address Deklaration aus, um den XML-Reader und Writer soap_read_Address und soap_write_Address zu generieren, zum 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 der Address a Objekts. Durch Annotation der Deklarationen der Header-Datei mit XML-Namespace-Details (hier nicht gezeigt) generieren die Tools auch Schemas. Dies ist ein einfaches Beispiel. Die gSOAP-Tools können eine sehr breite Palette von C- und C ++ - Datentypen verarbeiten, einschließlich zeigerbasierter verknüpfter Strukturen und sogar (zyklischer) Graphen (und nicht nur Bäume).

Hoffe das hilft.


Ich mag den Gnome-XML-Parser. Es ist Open Source (MIT-Lizenz, also können Sie es in kommerziellen Produkten verwenden), schnell und hat DOM und SAX-basierte Schnittstellen.

http://xmlsoft.org/


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).


TinyXML eignet sich am besten für einfache XML-Arbeit. Wenn Sie jedoch weitere Funktionen benötigen, testen Sie Xerces über das Apache-Projekt. Gehen Sie auf die folgende Seite, um mehr über die Funktionen zu erfahren.

http://xerces.apache.org/xerces-c/


TiCPP ist eine "mehr 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 verwendet. Vorlagen, Ausnahmen und viel bessere Fehlerbehandlung. Es ist auch vollständig in Doxygen dokumentiert. Es ist wirklich cool, weil diese Version Sie auf die gleiche Weise wie zuvor interface tiny oder Sie können wählen, um die neuen 'Ticpp' Klassen zu verwenden. Alles, was Sie tun müssen, ist TIXML_USE_TICPP zu definieren. Es wurde in VC 6.0, VC 7.0, VC 7.1, VC 8.0, MinGW gcc 3.4.5 und in Linux GNU gcc 3+ getestet



Wie wäre es mit RapidXML ? RapidXML ist ein sehr schneller und kleiner XML-DOM-Parser, der in C ++ geschrieben ist. Es ist in erster Linie für eingebettete Umgebungen, Computerspiele oder andere Anwendungen gedacht, bei denen die verfügbare Speicher- oder CPU-Verarbeitungsleistung einen hohen Stellenwert hat. RapidXML ist unter der Boost-Softwarelizenz lizenziert und der Quellcode ist frei verfügbar.

Eigenschaften

  • Parsing-Geschwindigkeit (einschließlich DOM-Baumbildung) nähert sich der Geschwindigkeit der Strlen-Funktion, die auf denselben Daten ausgeführt wird.
  • Auf einer modernen CPU (ab 2008) beträgt der Parser-Durchsatz etwa 1 Milliarde Zeichen pro Sekunde. Siehe Leistung im Online-Handbuch.
  • Geringer Speicherbedarf des Codes und erstellte DOM-Bäume.
  • Eine Nur-Header-Implementierung, die den Integrationsprozess vereinfacht.
  • Einfache Lizenz, die die Nutzung für fast jeden Zweck erlaubt, sowohl kommerzielle als auch nicht-kommerzielle, ohne jegliche Verpflichtungen.
  • Unterstützt UTF-8 und teilweise UTF-16, UTF-32-Kodierungen.
  • Portabler Quellcode ohne Abhängigkeiten außer einer sehr kleinen Teilmenge der C ++ - Standardbibliothek.
  • Diese Teilmenge ist so klein, dass sie leicht manuell emuliert werden kann, wenn die Verwendung einer Standardbibliothek unerwünscht ist.

Einschränkungen

  • Der Parser ignoriert DOCTYPE-Deklarationen.
  • Es gibt keine Unterstützung für XML-Namespaces.
  • Der Parser prüft nicht auf Zeichengültigkeit.
  • Die Schnittstelle des Parsers entspricht nicht der DOM-Spezifikation.
  • Der Parser überprüft die Attributeindeutigkeit nicht.

Quelle: wikipedia.org://Rapidxml

Abhängig von Ihrer Verwendung können Sie eine XML-Datenbindung verwenden? CodeSynthesis XSD ist ein XML Data Binding Compiler für C ++, der von Code Synthesis entwickelt wurde und unter der GNU GPL und einer proprietären Lizenz zweifach lizensiert ist. Bei einer XML-Instanzspezifikation (XML-Schema) generiert es C ++ - Klassen, die das angegebene Vokabular sowie den Parsing- und Serialisierungscode darstellen.

Eine der einzigartigen Funktionen von CodeSynthesis XSD ist die Unterstützung von zwei verschiedenen XML-Schema-zu-C ++ - Zuordnungen: In-Memory C ++ / Tree und stream-orientierter C ++ / Parser. Das C ++ / Tree-Mapping ist ein traditionelles Mapping mit einer baumähnlichen, speicherinternen Datenstruktur. C ++ / Parser ist ein neues, SAX-ähnliches Mapping, das die in XML-Instanzdokumenten gespeicherten Informationen als eine Hierarchie vokabularspezifischer Analyseereignisse darstellt. Im Vergleich zu C ++ / Tree ermöglicht die C ++ / Parser-Zuordnung die Verarbeitung großer XML-Dokumente, die nicht in den Arbeitsspeicher passen, eine stream-orientierte Verarbeitung oder die Verwendung einer vorhandenen In-Memory-Repräsentation.

Quelle: wikipedia.org:/:CodeSynthesis XSD


TinyXML und auch Boost.PropertyTree. Letzteres erfüllt nicht alle offiziellen Anforderungen, ist aber sehr einfach.



Ich bin ein C ++ Neuling und nachdem ich ein paar verschiedene Vorschläge auf dieser Seite versucht habe, muss ich sagen, dass ich pugixml am meisten pugixml . Es hat leicht verständliche Dokumentation und eine API auf hohem Niveau, die alles war, was ich suchte.


Die Verwendung von --> hat historische Relevanz. Das Dekrementieren war (und ist in einigen Fällen immer noch) schneller als das Inkrementieren der x86-Architektur. Die Verwendung von --> legt nahe, dass x auf 0 , und spricht diejenigen mit mathematischen Hintergründen an.





c++ xml open-source