Was ist der beste offene XML-Parser für C++? [duplicate]

Lesezeit: 9 Minuten

Was ist der beste offene XML Parser fur C duplicate
Walfisch

Ich suche nach einem einfachen, sauberen und korrekten XML-Parser für mein C++-Projekt. Soll ich meine eigene schreiben?

  • Hinweis: Es gibt eine Frage zur Auswahl eines XML-Parsers für C++.

    – Nicol Bolas

    28. Juni 2012 um 23:35 Uhr

  • Wie @NicolBolas betont, gibt es jetzt einen viel neueren StackOverflow-Beitrag, der dieselbe Frage stellt: stackoverflow.com/questions/9387610/…

    – Dan Nissenbaum

    1. Mai 2014 um 21:02 Uhr

  • Beachten Sie, dass der viel neuere StackOverflow-Beitrag, auf den ich mich oben beziehe, fast so viele positive Stimmen hat wie die aktuelle Frage (Stand Dezember 2014), und die Antwort hat viel mehr positive Stimmen als die Antworten hier und hat ein fantastisches, leicht lesbares Flussdiagramm.

    – Dan Nissenbaum

    3. Dezember 2014 um 3:54 Uhr


1646945411 942 Was ist der beste offene XML Parser fur C duplicate
jk.

Wie wäre es mit RapidXML? RapidXML ist ein sehr schneller und kleiner XML-DOM-Parser, der in C++ geschrieben ist. Es richtet sich in erster Linie an eingebettete Umgebungen, Computerspiele oder andere Anwendungen, bei denen der verfügbare Speicher oder die CPU-Rechenleistung einen hohen Stellenwert haben. RapidXML ist unter der Boost Software License lizenziert und sein Quellcode ist frei verfügbar.

Merkmale

  • Parsing-Geschwindigkeit (einschließlich DOM-Baumerstellung) nähert sich der Geschwindigkeit der Strlen-Funktion, die auf denselben Daten ausgeführt wird.
  • Auf einer modernen CPU (Stand 2008) beträgt der Parser-Durchsatz etwa 1 Milliarde Zeichen pro Sekunde. Siehe Leistungsabschnitt im Online-Handbuch.
  • Geringer Speicherbedarf des Codes und erstellte DOM-Bäume.
  • Eine reine Header-Implementierung, die den Integrationsprozess vereinfacht.
  • Einfache Lizenz, die die Nutzung für nahezu jeden Zweck, sowohl kommerziell als auch nichtkommerziell, ohne Verpflichtungen erlaubt.
  • 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 der Standardbibliothek unerwünscht ist.

Einschränkungen

  • Der Parser ignoriert DOCTYPE-Deklarationen.
  • XML-Namespaces werden nicht unterstützt.
  • Der Parser überprüft nicht die Zeichengültigkeit.
  • Die Schnittstelle des Parsers entspricht nicht der DOM-Spezifikation.
  • Der Parser überprüft nicht die Eindeutigkeit von Attributen.

Quelle: wikipedia.org://Rapidxml


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

Eines der einzigartigen Features von CodeSynthesis XSD ist die Unterstützung für zwei verschiedene Zuordnungen von XML-Schema zu C++: In-Memory-C++/Tree und Stream-orientierter C++/Parser. Das C++/Tree-Mapping ist ein herkömmliches Mapping mit einer baumartigen, speicherinternen Datenstruktur. C++/Parser ist ein neues, SAX-ähnliches Mapping, das die in XML-Instanzdokumenten gespeicherten Informationen als Hierarchie vokabularspezifischer Parsing-Ereignisse darstellt. Im Vergleich zu C++/Tree ermöglicht die C++/Parser-Zuordnung die Handhabung großer XML-Dokumente, die nicht in den Arbeitsspeicher passen würden, die Durchführung einer Stream-orientierten Verarbeitung oder die Verwendung einer vorhandenen In-Memory-Darstellung.

Quelle: wikipedia.org://CodeSynthesis XSD

  • Ich mag den Header-Only-Ansatz (ich denke, Sie brauchen wirklich eine Header-Datei). Werfen Sie es einfach ein und machen Sie sich keine Sorgen, irgendetwas in Ihrem Build-Prozess zu ändern.

    – Frank

    11. Februar 2009 um 14:54 Uhr

  • Hmh. Wenn “Der Parser nicht auf Zeichengültigkeit prüft” und “Der Parser nicht auf Eindeutigkeit von Attributen prüft”, handelt es sich streng genommen NICHT um einen XML-Parser – dies sind keine optionalen Prüfungen, die von der XML-Spezifikation selbst vorgeschrieben werden. Ich würde meine Zeit nicht mit so etwas verschwenden, da es auch gute anständige Parser gibt (zum Beispiel libxml2)_

    – StaxMan

    23. April 2009 um 4:06 Uhr

  • Das ist der Grund, warum ich Rapidxml verwende. Ein System, mit dem ich arbeite, besteht darauf, illegale abschließende Leerzeichen in die Elementnamen einzufügen – rapidXML ist das einzige, das damit fertig wird (zugegeben, indem es es nicht bemerkt!).

    – Martin Beckett

    1. Dezember 2009 um 1:50 Uhr

  • rapidxml hat viele Funktionen zum Implementieren eines xml, wie msxml. Aber das Durchlaufen von Knoten ist sehr schwierig als bei anderen Parsern … und auch das Lesen und Schreiben von Dateien …

    – Rajakumar

    3. Juni 2010 um 10:30 Uhr

  • Bei der Auswahl eines XML-Parsers für die kommerzielle Nutzung (in einer bestimmten Art von Domäne) müssen wir sehen, ob der Parser mindestens 2 oder 3 Jahrzehnte lang gewartet wird. Etwas wie Xerces scheint eher unterstützt und gewartet zu werden als RapidXML. Wäre RapidXML also eine kluge Wahl?

    – Nav

    21. Juli 2011 um 5:24 Uhr

1646945412 9 Was ist der beste offene XML Parser fur C duplicate
Zbyl

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

  • Wow, das sind viele Behauptungen. Können Sie diese belegen? Was macht es in diesen Bereichen besser? Irgendwelche Referenzartikel?

    – Kissaki

    13. September 2011 um 15:14 Uhr


  • Wenn ich ein bisschen auf den RapidXML- und Pugixml-Websites lese, verstehe ich, was Sie (wahrscheinlich) meinen. RapidXML basiert auf/inspiriert von pugixml. Es hat eine minimale Dokumentation zum Parsen. pugixml hat eine gute Dokumentation zum Parsen und eine nette API. (Bis jetzt nur über Parsing gelesen.)

    – Kissaki

    14. September 2011 um 8:23 Uhr

  • Pugixml ist viel einfacher zu verwenden, nehmen wir das Lesen von XML aus einer Datei – es ist nur load_file (“file.xml”)! Ich finde es viel intuitiver als rapid_xml. Das Auswählen von Knoten per XPath funktioniert auch ziemlich gut.

    – Aurel

    18. Juni 2012 um 6:58 Uhr


  • Ich benutze pugixml seit ein paar Jahren. Funktioniert gut, einfach in Projekte zu integrieren, anständige Dokumentation. ABER, egal welches Paket Sie verwenden, das Zusammenstellen/Parsen von XML in C++ ist immer eine chaotische Angelegenheit.

    – dlkammern

    14. Januar 2013 um 21:28 Uhr

  • @Kissaki Ich habe vor der Verwendung einige XML-Parser getestet, darunter einige kommerzielle [pugixml] (pugixml.org) in einem kommerziellen Produkt.

    – sg7

    8. Juni 2016 um 18:51 Uhr

Versuchen Sie TinyXML.

http://sourceforge.net/projects/tinyxml

  • TinyXML mehrmals auf VC++ und eVC++ verwendet – hat immer gut funktioniert

    – JohnIdol

    4. Oktober 2008 um 19:45 Uhr

  • oder verwenden Sie TinyXML 2 grinninglizard.com/tinyxml2/index.html

    – KindDragon

    17. Oktober 2012 um 16:30 Uhr

  • Ich probiere das aus, und aus irgendeinem Grund erhalten die Klassen, die ich von tinyxml2 aufrufe, einen nicht behobenen Fehler. Irgendeine Idee warum? Ich habe die Klassen in der Header-Datei gefunden, die ich eingeschlossen habe, also sollten sie verfügbar sein.

    – backend_dev_123

    16. Dezember 2014 um 17:12 Uhr

  • Ich habe diese Bibliothek (auch TinyXML2 überprüft) von der Verwendung abgelehnt, weil – die Bibliothek das Laden von Unicode-Pfadnamen nicht ermöglichte. Auch derzeit bevorzuge ich Benutzerfreundlichkeit und vollständige Implementierung über Leistung.

    – TarmoPikaro

    23. September 2016 um 11:30 Uhr

TiCPP ist eine “eher 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/), das VIELE der C++-Stärken nutzt. Vorlagen, Ausnahmen und viel bessere Fehlerbehandlung. Es ist auch vollständig in doxygen dokumentiert. Es ist wirklich cool, denn diese Version ermöglicht es Ihnen, Tiny genauso zu bedienen wie zuvor, oder Sie können wählen, ob Sie die neuen ‘ticpp’-Klassen verwenden möchten. Sie müssen lediglich TIXML_USE_TICPP 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

Probier diese:
http://www.applied-mathematics.net/tools/xmlParser.html

es ist einfacher und schneller als RapidXML oder PUGXML.
TinyXML ist der schlechteste der “einfachen Parser”.

  • Sie haben ein neueres gemacht: angewandte-mathematik.net/tools/IXMLParser.html

    – Andreas

    21. Juli 2015 um 6:45 Uhr

  • Nur eine Warnung an diejenigen, die es wie ich überprüfen: die neuer Version hat eine wirklich seltsame Lizenz und Sie können sie nicht einmal herunterladen, ohne ihm vorher eine E-Mail zu schicken. Ich denke, ich werde mit pugixml gehen.

    – Andreas

    21. Juli 2015 um 6:51 Uhr

1646945412 762 Was ist der beste offene XML Parser fur C duplicate
yrp

Verwenden Sie TinyXML nicht, wenn Sie sich Sorgen um die Effizienz/Speicherverwaltung machen (es neigt dazu, viele aus kleinen Blöcken). Mein persönlicher Favorit ist RapidXML.

  • Sie haben ein neueres gemacht: angewandte-mathematik.net/tools/IXMLParser.html

    – Andreas

    21. Juli 2015 um 6:45 Uhr

  • Nur eine Warnung an diejenigen, die es wie ich überprüfen: die neuer Version hat eine wirklich seltsame Lizenz und Sie können sie nicht einmal herunterladen, ohne ihm vorher eine E-Mail zu schicken. Ich denke, ich werde mit pugixml gehen.

    – Andreas

    21. Juli 2015 um 6:51 Uhr

1646945412 212 Was ist der beste offene XML Parser fur C duplicate
RAM

Wie wäre es mit gSEIFE? 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 besteht keine Notwendigkeit, eine XML-Parser-API zu verwenden, lassen Sie sie einfach Ihre Daten im XML-Format für Sie 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 seit der Einführung von gSOAP im Jahr 2001 für viele industrielle Anwendungen gut funktioniert, wie Erfahrungsberichte zeigen.

Hier ist eine kurze Liste der 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 zur Implementierung einer XML-Webdienst-Client-App (kein DOM zur Begrenzung der Speichernutzung).
  • Schnell: Glauben Sie nicht, was andere Tools behaupten, die wahre Geschwindigkeit sollte gemessen werden mit E/A. Bei gSOAP sind es über 3000 Roundtrip-XML-Nachrichten über TCP/IP. Der XML-Parsing-Overhead ist vernachlässigbar, da es sich um einen einfachen linearen Scan der Eingabe/Ausgabe handelt, während die (De-)Serialisierung stattfindet.
  • XML-Unterstützung: Import/Export von XML-Schema (XSD), WSDL-Import/Export, XML-Namespaces, XML-Kanonisierung, XML mit Anhängen (MIME), optionale Verwendung von DOM, viele Optionen zur Erzeugung von XML mit Einrückung, Verwendung von UTF8-Strings usw.
  • XML-Validierung: teilweise und vollständig (Option)
  • WS-Unterstützung: WS-Security, WS-ReliableMessaging, WS-Addressing, WS-Policy, WS-SecurityPolicy und andere.
  • Debugging: integrierte Speicherverwaltung mit Leak-Erkennung, Logging.
  • API: keine API zum Lernen, nur “Soap”-Engine-Kontextinitialisierung, dann die Lese-/Schreibschnittstelle für Ihre Daten verwenden und “Soap”-Engine-Kontextzerstörung.

Zum Beispiel:

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

Führen Sie dann “soapcpp2” auf dem aus Address Klassendeklaration oben zum Generieren der soap_read_Address und soap_write_Address XML-Leser und -Schreiber, zum Beispiel:

Address *a = new Address();
a = ...;
soap ctx = soap_new();
soap_write_Address(ctx, a);
soap_end(ctx);
soap_free(ctx);`

Dadurch wird eine XML-Darstellung der erstellt Address a Objekt. Durch Kommentieren der Header-Datei-Deklarationen 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 (statt nur Bäume).

Hoffe das hilft.

  • Für die kommerzielle Nutzung fällt eine einmalige Gebühr für gSoap an

    – Nayana Adassuriya

    6. Juni 2013 um 5:33 Uhr

988960cookie-checkWas ist der beste offene XML-Parser für C++? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy