
TinyXML 2.6.2 con correcciones para CVE-2021-42260 y CVE-2023-34194
/** @mainpage
TinyXML es un analizador XML simple, pequeño y en C++ que se puede integrar fácilmente en otros programas.
En resumen, TinyXML analiza un documento XML y construye a partir de él un Modelo de Objetos de Documento (DOM) que se puede leer, modificar y guardar.
XML significa "eXtensible Markup Language" (Lenguaje de Marcado Extensible). Te permite crear tus propios marcados de documentos. Mientras que HTML hace un muy buen trabajo marcando documentos para navegadores, XML te permite definir cualquier tipo de marcado de documento, por ejemplo un documento que describa una lista de "tareas pendientes" para una aplicación organizadora. XML es un formato muy estructurado y conveniente. Todos esos formatos de archivo aleatorios creados para almacenar datos de aplicaciones pueden ser reemplazados por XML. Un analizador para todo.
El mejor lugar para la especificación completa, correcta y, francamente, difícil de leer está en http://www.w3.org/TR/2004/REC-xml-20040204/. Una introducción a XML (que realmente me gusta) se puede encontrar en http://skew.org/xml/tutorial.
Hay diferentes formas de acceder e interactuar con datos XML. TinyXML utiliza un Modelo de Objetos de Documento (DOM), lo que significa que los datos XML se analizan en objetos C++ que se pueden explorar y manipular, y luego escribirlos en disco o en otro flujo de salida. También puedes construir un documento XML desde cero con objetos C++ y escribirlo en disco o en otro flujo de salida.
TinyXML está diseñado para ser fácil y rápido de aprender. Son dos archivos de encabezado y cuatro archivos cpp. Simplemente añádelos a tu proyecto y listo. Hay un archivo de ejemplo - xmltest.cpp - para que empieces.
TinyXML se distribuye bajo la licencia ZLib, por lo que puedes usarlo en código abierto o comercial. Los detalles de la licencia están en la parte superior de cada archivo fuente.
TinyXML intenta ser un analizador flexible, pero con una salida XML verdaderamente correcta y conforme. TinyXML debería compilarse en cualquier sistema razonablemente conforme a C++. No depende de excepciones ni RTTI. Se puede compilar con o sin soporte STL. TinyXML soporta completamente la codificación UTF-8 y las primeras 64k entidades de caracteres.
TinyXML no analiza ni usa DTDs (Definiciones de Tipo de Documento) ni XSLs (Lenguaje de Hojas de Estilo Extensibles). Hay otros analizadores disponibles (consulta www.sourceforge.org, busca XML) que tienen muchas más funcionalidades. Pero también son mucho más grandes, tardan más en configurarse en tu proyecto, tienen una curva de aprendizaje más alta y a menudo tienen una licencia más restrictiva. Si trabajas con navegadores o tienes necesidades XML más completas, TinyXML no es el analizador para ti.
La siguiente sintaxis DTD no se analizará en este momento en TinyXML:
@verbatim ]> @endverbatim
porque TinyXML ve esto como un nodo !DOCTYPE con un nodo !ELEMENT incrustado ilegalmente. Esto puede abordarse en el futuro.
Para los impacientes, aquí hay un tutorial para empezar. Una excelente manera de comenzar, pero vale la pena leer este manual (muy corto) completamente.
TinyXML es un código maduro y probado. Es muy estable. Si encuentras errores, por favor reporta un informe de error en el sitio web de sourceforge (www.sourceforge.net/projects/tinyxml). Los solucionaremos lo antes posible.
Hay algunas áreas de mejora; por favor revisa sourceforge si estás interesado en trabajar en TinyXML.
¡Proyectos TinyXML que pueden resultarte útiles! (Descripciones proporcionadas por los proyectos.)
TinyXML se puede compilar para usar o no STL. Cuando se usa STL, TinyXML utiliza la clase std::string y soporta completamente std::istream, std::ostream, operator<< y operator>>. Muchos métodos de la API tienen ambas formas 'const char*' y 'const std::string&'.
Cuando el soporte STL se compila fuera, no se incluyen archivos STL en absoluto. Todas las clases de cadenas son implementadas por TinyXML mismo. Todos los métodos de la API usan la forma 'const char*' para entrada.
Usa la directiva de compilación #define:
TIXML_USE_STL
para compilar una versión u otra. Esto se puede pasar al compilador o establecer como la primera línea de "tinyxml.h".
Nota: Si compilas el código de prueba en Linux, configurar la variable de entorno TINYXML_USE_STL=YES/NO controlará la compilación STL. En el archivo de proyecto de Windows, se proporcionan objetivos STL y no STL. En tu proyecto, probablemente sea más fácil agregar la línea "#define TIXML_USE_STL" como la primera línea de tinyxml.h.
TinyXML soporta UTF-8 permitiendo manipular archivos XML en cualquier idioma. TinyXML también soporta el "modo heredado" - la codificación utilizada antes del soporte UTF-8 y probablemente mejor descrita como "ascii extendido".
Normalmente, TinyXML intentará detectar la codificación correcta y usarla. Sin embargo, al establecer el valor de TIXML_DEFAULT_ENCODING en el archivo de encabezado, se puede forzar a TinyXML a usar siempre una codificación.
TinyXML asumirá el Modo Heredado hasta que ocurra una de las siguientes condiciones:
¿Qué sucede si la codificación se establece o detecta incorrectamente? TinyXML intentará leer y pasar texto visto como incorrectamente codificado. Puedes obtener algunos resultados extraños o caracteres distorsionados. Quizás quieras forzar a TinyXML al modo correcto.
Puedes forzar a TinyXML al Modo Heredado usando LoadFile( TIXML_ENCODING_LEGACY ) o LoadFile( filename, TIXML_ENCODING_LEGACY ). Puedes forzarlo a usar el modo heredado todo el tiempo estableciendo TIXML_DEFAULT_ENCODING = TIXML_ENCODING_LEGACY. Del mismo modo, puedes forzarlo a TIXML_ENCODING_UTF8 con la misma técnica.
Para usuarios de inglés, usando XML en inglés, UTF-8 es lo mismo que ASCII bajo. No necesitas estar al tanto de UTF-8 ni cambiar tu código de ninguna manera. Puedes pensar en UTF-8 como un "supraconjunto" de ASCII.
UTF-8 no es un formato de doble byte, ¡pero es una codificación estándar de Unicode! TinyXML no usa ni soporta directamente wchar, TCHAR o _UNICODE de Microsoft en este momento. Es común ver que el término "Unicode" se refiere incorrectamente a UTF-16, una codificación de ancho de byte de Unicode. Esto es una fuente de confusión.