
TinyXML 2.6.2 mit Korrekturen für CVE-2021-42260 und CVE-2023-34194
/** @mainpage
TinyXML ist ein einfacher, kleiner C++-XML-Parser, der leicht in andere Programme integriert werden kann.
Kurz gesagt: TinyXML parst ein XML-Dokument und erstellt daraus ein Document Object Model (DOM), das gelesen, geändert und gespeichert werden kann.
XML steht für „eXtensible Markup Language". Es ermöglicht Ihnen, eigene Dokument-Auszeichnungen zu erstellen. Während HTML Dokumente für Browser sehr gut auszeichnet, erlaubt es XML, jede Art von Dokument-Auszeichnung zu definieren, zum Beispiel ein Dokument, das eine „To-do"-Liste für eine Organizer-Anwendung beschreibt. XML ist ein sehr strukturiertes und praktisches Format. Alle beliebigen Dateiformate, die zum Speichern von Anwendungsdaten erstellt wurden, können durch XML ersetzt werden. Ein Parser für alles.
Der beste Ort für die vollständige, korrekte und offen gesagt schwer zu lesende Spezifikation ist http://www.w3.org/TR/2004/REC-xml-20040204/. Eine Einführung in XML (die ich wirklich mag) finden Sie unter http://skew.org/xml/tutorial.
Es gibt verschiedene Möglichkeiten, auf XML-Daten zuzugreifen und mit ihnen zu interagieren. TinyXML verwendet ein Document Object Model (DOM), d. h. die XML-Daten werden in C++-Objekte geparst, die durchsucht und manipuliert und dann auf die Festplatte oder in einen anderen Ausgabestrom geschrieben werden können. Sie können ein XML-Dokument auch von Grund auf mit C++-Objekten erstellen und dieses auf die Festplatte oder in einen anderen Ausgabestrom schreiben.
TinyXML ist darauf ausgelegt, einfach und schnell erlernbar zu sein. Es besteht aus zwei Headern und vier CPP-Dateien. Fügen Sie diese einfach zu Ihrem Projekt hinzu und los geht's. Es gibt eine Beispieldatei – xmltest.cpp –, die Ihnen den Einstieg erleichtert.
TinyXML wird unter der ZLib-Lizenz veröffentlicht, sodass Sie es in Open-Source- oder kommerziellem Code verwenden können. Die Details der Lizenz stehen am Anfang jeder Quelldatei.
TinyXML versucht, ein flexibler Parser zu sein, aber mit wirklich korrekter und konformer XML-Ausgabe. TinyXML sollte auf jedem halbwegs C++-konformen System kompilieren. Es verlässt sich nicht auf Exceptions oder RTTI. Es kann mit oder ohne STL-Unterstützung kompiliert werden. TinyXML unterstützt die UTF-8-Kodierung und die ersten 64k Zeichenentitäten vollständig.
TinyXML parst oder verwendet keine DTDs (Document Type Definitions) oder XSLs (eXtensible Stylesheet Language). Es gibt andere Parser da draußen (schauen Sie auf www.sourceforge.org vorbei, suchen Sie nach XML), die wesentlich umfangreicher ausgestattet sind. Aber sie sind auch viel größer, brauchen länger für die Einrichtung in Ihrem Projekt, haben eine steilere Lernkurve und oft eine restriktivere Lizenz. Wenn Sie mit Browsern arbeiten oder umfassendere XML-Anforderungen haben, ist TinyXML nicht der richtige Parser für Sie.
Die folgende DTD-Syntax wird derzeit in TinyXML nicht geparst:
@verbatim ]> @endverbatim
da TinyXML dies als einen !DOCTYPE-Knoten mit einem unzulässig eingebetteten !ELEMENT-Knoten betrachtet. Dies könnte in Zukunft behoben werden.
Für die Ungeduldigen gibt es hier ein Tutorial, um loszulegen. Ein großartiger Weg, um den Einstieg zu finden, aber es lohnt sich, dieses (sehr kurze) Handbuch vollständig zu lesen.
TinyXML ist ausgereifter, getesteter Code. Es ist sehr stabil. Wenn Sie Fehler finden, melden Sie bitte einen Fehlerbericht auf der SourceForge-Website (www.sourceforge.net/projects/tinyxml). Wir werden sie so schnell wie möglich beheben.
Es gibt einige Bereiche mit Verbesserungspotenzial; schauen Sie bitte auf SourceForge vorbei, wenn Sie Interesse daran haben, an TinyXML mitzuarbeiten.
TinyXML-Projekte, die Sie nützlich finden könnten! (Beschreibungen von den Projekten bereitgestellt.)
TinyXML kann so kompiliert werden, dass es STL verwendet oder nicht. Bei Verwendung von STL nutzt TinyXML die Klasse std::string und unterstützt vollständig std::istream, std::ostream, operator<< und operator>>. Viele API-Methoden gibt es sowohl in der 'const char*'- als auch in der 'const std::string&'-Form.
Wenn die STL-Unterstützung herauskompiliert wird, werden überhaupt keine STL-Dateien eingebunden. Alle String-Klassen werden von TinyXML selbst implementiert. API-Methoden verwenden für die Eingabe alle die 'const char*'-Form.
Verwenden Sie das #define zur Compile-Zeit:
TIXML_USE_STL
um die eine oder andere Version zu kompilieren. Dies kann dem Compiler übergeben oder als erste Zeile von „tinyxml.h" gesetzt werden.
Hinweis: Wenn Sie den Testcode unter Linux kompilieren, steuert das Setzen der Umgebungsvariable TINYXML_USE_STL=YES/NO die STL-Kompilierung. In der Windows-Projektdatei werden STL- und Nicht-STL-Ziele bereitgestellt. In Ihrem Projekt ist es wahrscheinlich am einfachsten, die Zeile „#define TIXML_USE_STL" als erste Zeile von tinyxml.h hinzuzufügen.
TinyXML unterstützt UTF-8 und ermöglicht so die Bearbeitung von XML-Dateien in jeder Sprache. TinyXML unterstützt auch den „Legacy-Modus" – die Kodierung, die vor der UTF-8-Unterstützung verwendet wurde und wohl am besten als „erweitertes ASCII" beschrieben werden kann.
Normalerweise versucht TinyXML, die korrekte Kodierung zu erkennen und zu verwenden. Durch das Setzen des Werts von TIXML_DEFAULT_ENCODING in der Header-Datei kann TinyXML jedoch gezwungen werden, immer eine bestimmte Kodierung zu verwenden.
TinyXML geht vom Legacy-Modus aus, bis einer der folgenden Fälle eintritt:
Was passiert, wenn die Kodierung falsch gesetzt oder erkannt wird? TinyXML versucht, Text, der als falsch kodiert angesehen wird, zu lesen und durchzureichen. Möglicherweise erhalten Sie seltsame Ergebnisse oder verstümmelte Zeichen. Möglicherweise möchten Sie TinyXML in den korrekten Modus zwingen.
Sie können TinyXML mit LoadFile( TIXML_ENCODING_LEGACY ) oder LoadFile( filename, TIXML_ENCODING_LEGACY ) in den Legacy-Modus zwingen. Sie können es zwingen, den Legacy-Modus immer zu verwenden, indem Sie TIXML_DEFAULT_ENCODING = TIXML_ENCODING_LEGACY setzen. Ebenso können Sie es mit derselben Technik auf TIXML_ENCODING_UTF8 zwingen.
Für englischsprachige Benutzer, die englisches XML verwenden, ist UTF-8 dasselbe wie Low-ASCII. Sie müssen sich UTF-8 nicht bewusst sein oder Ihren Code in irgendeiner Weise ändern. Sie können sich UTF-8 als „Obermenge" von ASCII vorstellen.