
TinyXML 2.6.2 con correzioni per CVE-2021-42260 e CVE-2023-34194
/** @mainpage
TinyXML è un parser XML C++ semplice, piccolo e facilmente integrabile in altri programmi.
In breve, TinyXML analizza un documento XML e ne costruisce un Document Object Model (DOM) che può essere letto, modificato e salvato.
XML sta per "eXtensible Markup Language". Ti permette di creare i tuoi markup di documento. Mentre l'HTML fa un ottimo lavoro nel marcare i documenti per i browser, XML ti permette di definire qualsiasi tipo di markup di documento, ad esempio un documento che descrive una lista di "cose da fare" per un'applicazione organizer. XML è un formato molto strutturato e comodo. Tutti quei formati di file arbitrari creati per memorizzare dati di applicazioni possono essere sostituiti da XML. Un solo parser per tutto.
Il posto migliore per la specifica completa, corretta e, francamente, difficile da leggere è http://www.w3.org/TR/2004/REC-xml-20040204/. Un'introduzione a XML (che mi piace molto) si trova a http://skew.org/xml/tutorial.
Ci sono diversi modi per accedere e interagire con i dati XML. TinyXML usa un Document Object Model (DOM), il che significa che i dati XML vengono analizzati in oggetti C++ che possono essere esplorati e manipolati, e poi scritti su disco o su un altro stream di output. Puoi anche costruire un documento XML da zero con oggetti C++ e scriverlo su disco o su un altro stream di output.
TinyXML è progettato per essere facile e veloce da imparare. Si tratta di due header e quattro file cpp. Basta aggiungerli al tuo progetto e sei pronto per partire. C'è un file di esempio - xmltest.cpp - per iniziare.
TinyXML è rilasciato sotto la licenza ZLib, quindi puoi usarlo in codice open source o commerciale. I dettagli della licenza sono all'inizio di ogni file sorgente.
TinyXML cerca di essere un parser flessibile, ma con un output XML davvero corretto e conforme. TinyXML dovrebbe compilare su qualsiasi sistema ragionevolmente conforme al C++. Non fa affidamento su eccezioni o RTTI. Può essere compilato con o senza supporto STL. TinyXML supporta completamente la codifica UTF-8 e le prime 64k entità di caratteri.
TinyXML non analizza né usa DTD (Document Type Definitions) o XSL (eXtensible Stylesheet Language). Ci sono altri parser in giro (controlla www.sourceforge.org, cerca XML) che hanno molte più funzionalità. Ma sono anche molto più grandi, richiedono più tempo per la configurazione nel tuo progetto, hanno una curva di apprendimento più ripida e spesso hanno una licenza più restrittiva. Se lavori con i browser o hai esigenze XML più complete, TinyXML non è il parser che fa per te.
La seguente sintassi DTD non verrà analizzata al momento in TinyXML:
@verbatim ]> @endverbatim
perché TinyXML lo vede come un nodo !DOCTYPE con un nodo !ELEMENT incorporato illegalmente. Questo potrebbe essere risolto in futuro.
Per gli impazienti, ecco un tutorial per iniziare. Un ottimo modo per partire, ma vale la pena leggere questo manuale (molto breve) per intero.
TinyXML è un codice maturo e collaudato. È molto stabile. Se trovi bug, per favore segnalali sul sito web di sourceforge (www.sourceforge.net/projects/tinyxml). Li sistemeremo il prima possibile.
Ci sono alcune aree di miglioramento; controlla sourceforge se sei interessato a lavorare su TinyXML.
Progetti TinyXML che potresti trovare utili! (Descrizioni fornite dai progetti.)
TinyXML può essere compilato per usare o non usare STL. Quando usa STL, TinyXML usa la classe std::string e supporta completamente std::istream, std::ostream, operator<< e operator>>. Molti metodi API hanno sia le forme 'const char*' che 'const std::string&'.
Quando il supporto STL è escluso dalla compilazione, nessun file STL viene incluso. Tutte le classi stringa sono implementate da TinyXML stesso. Tutti i metodi API usano la forma 'const char*' per l'input.
Usa la #define in fase di compilazione:
TIXML_USE_STL
per compilare una versione o l'altra. Questo può essere passato dal compilatore o impostato come prima riga di "tinyxml.h".
Nota: se compili il codice di test in Linux, impostando la variabile d'ambiente TINYXML_USE_STL=YES/NO controllerai la compilazione STL. Nel file di progetto Windows vengono forniti target STL e non STL. Nel tuo progetto, probabilmente è più semplice aggiungere la riga "#define TIXML_USE_STL" come prima riga di tinyxml.h.
TinyXML supporta UTF-8, permettendo di manipolare file XML in qualsiasi lingua. TinyXML supporta anche la "modalità legacy" - la codifica usata prima del supporto UTF-8 e probabilmente meglio descritta come "ascii esteso".
Normalmente, TinyXML cercherà di rilevare la codifica corretta e di usarla. Tuttavia, impostando il valore di TIXML_DEFAULT_ENCODING nel file header, TinyXML può essere forzato a usare sempre una codifica.
TinyXML assumerà la Modalità Legacy finché non si verifica una delle seguenti condizioni:
Cosa succede se la codifica è impostata o rilevata in modo errato? TinyXML cercherà di leggere e lasciar passare il testo visto come codificato in modo improprio. Potresti ottenere risultati strani o caratteri alterati. Potresti voler forzare TinyXML nella modalità corretta.
Puoi forzare TinyXML in Modalità Legacy usando LoadFile( TIXML_ENCODING_LEGACY ) o LoadFile( filename, TIXML_ENCODING_LEGACY ). Puoi forzarlo a usare sempre la modalità legacy impostando TIXML_DEFAULT_ENCODING = TIXML_ENCODING_LEGACY. Allo stesso modo, puoi forzarlo a TIXML_ENCODING_UTF8 con la stessa tecnica.
Per gli utenti inglesi, che usano XML in inglese, UTF-8 è uguale al low-ASCII. Non hai bisogno di conoscere UTF-8 o di cambiare il tuo codice in alcun modo. Puoi pensare a UTF-8 come a un "superset" di ASCII.
UTF-8 non è un formato a doppio byte - ma è una codifica standard di Unicode! Al momento TinyXML non usa né supporta direttamente wchar, TCHAR o _UNICODE di Microsoft. È comune vedere il termine "Unicode" riferito impropriamente a UTF-16, una codifica a byte larghi di unicode. Questa è una fonte di confusione.