¿Cuál es el mejor analizador XML abierto para C ++?

Estoy buscando un analizador XML simple, limpio y correcto para usar en mi proyecto C ++. ¿Debo escribir el mío?

¿Qué tal RapidXML ? RapidXML es un analizador XML DOM muy rápido y pequeño escrito en C ++. Está dirigido principalmente a entornos integrados, juegos de computadora o cualquier otra aplicación donde la memoria disponible o el poder de procesamiento de la CPU sean de primera. RapidXML tiene licencia bajo la Licencia de software de Boost y su código fuente está disponible gratuitamente.

Caracteristicas

  • La velocidad de análisis (incluida la construcción de árbol DOM) se aproxima a la velocidad de la función strlen ejecutada en los mismos datos.
  • En una CPU moderna (a partir de 2008), el rendimiento del analizador es de aproximadamente mil millones de caracteres por segundo. Ver la sección de Rendimiento en el Manual en línea.
  • Huella de memoria pequeña del código y árboles DOM creados.
  • Una implementación de solo encabezados, lo que simplifica el proceso de integración.
  • Licencia simple que permite el uso para casi cualquier propósito, comercial y no comercial, sin ninguna obligación.
  • Admite codificaciones UTF-8 y parcialmente UTF-16, UTF-32.
  • Código fuente portátil sin dependencias que no sea un subconjunto muy pequeño de la biblioteca estándar de C ++.
  • Este subconjunto es tan pequeño que puede ser fácilmente emulado manualmente si el uso de la biblioteca estándar no es deseado.

Limitaciones

  • El analizador ignora las declaraciones de DOCTYPE.
  • No hay soporte para espacios de nombres XML.
  • El analizador no verifica la validez del carácter.
  • La interfaz del analizador no cumple con la especificación DOM.
  • El analizador no verifica la exclusividad de los atributos.

Fuente: wikipedia.org/Rapidxml


Dependiendo de su uso, ¿puede usar un enlace de datos XML? CodeSynthesis XSD es un comstackdor de enlace de datos XML para C ++ desarrollado por Code Synthesis y con doble licencia bajo la GNU GPL y una licencia propietaria. Dada una especificación de instancia XML (XML Schema), genera clases de C ++ que representan el vocabulario dado, así como el código de análisis y serialización.

Una de las características únicas de CodeSynthesis XSD es su compatibilidad con dos asignaciones diferentes de esquemas XML a C ++: C ++ / Tree en memoria y C ++ / Parser orientado a flujos. La asignación C ++ / Tree es una asignación tradicional con una estructura de datos en memoria similar a un árbol. C ++ / Parser es una nueva asignación similar a SAX que representa la información almacenada en documentos de instancia XML como una jerarquía de eventos de análisis específicos del vocabulario. En comparación con C ++ / Tree, la asignación C ++ / Parser permite manejar documentos XML grandes que no caben en la memoria, realizar un procesamiento orientado a flujo o utilizar una representación en memoria existente.

Fuente: wikipedia.org://CodeSynthesis XSD

pugixml – Analizador XML ligero, simple y rápido para C ++ Muy pequeño (comparable a RapidXML), muy rápido (comparable a RapidXML), muy fácil de usar ( mejor que RapidXML).

TiCPP es una versión “más c ++” de TinyXML.

‘TiCPP’ es la abreviatura del nombre oficial TinyXML ++. Es una interfaz completamente nueva para TinyXML ( http://www.grinninglizard.com/tinyxml/ ) que usa MUCHOS de los puntos fuertes de C ++. Plantillas, excepciones y manejo de errores mucho mejor. También está completamente documentado en doxygen. Es realmente genial porque esta versión te permite interactuar muy pequeño de la misma manera que antes o puedes elegir usar las nuevas clases de ‘ticpp’. Todo lo que necesita hacer es definir TIXML_USE_TICPP. Ha sido probado en VC 6.0, VC 7.0, VC 7.1, VC 8.0, MinGW gcc 3.4.5 y en Linux GNU gcc 3+

Prueba este: http://www.applied-mathematics.net/tools/xmlParser.html
es más fácil y más rápido que RapidXML o PUGXML.
TinyXML es lo peor del “analizador simple”.

No use TinyXML si le preocupa la eficiencia / administración de la memoria (tiende a asignar muchos bloques pequeños). Mi favorito personal es RapidXML .

¿Qué tal GSOAP ? Es de código abierto y está disponible de forma gratuita bajo la licencia GPL. A pesar de su nombre, el conjunto de herramientas gSOAP es una herramienta genérica de enlace de datos XML y le permite vincular sus datos C y C ++ a XML automáticamente. No es necesario utilizar una API de analizador XML, solo déjelo leer / escribir sus datos en formato XML. Si realmente necesita un analizador sintáctico de macros C ++ súper simple, entonces el SOAP puede ser una exageración. Pero para todo lo demás, ha funcionado bien, ya que los testimonios muestran muchas aplicaciones industriales desde que se introdujo el SOAP en 2001.

Aquí hay una breve lista de características:

  • Portátil: Windows, Linux, Mac OS X, Unix, VxWorks, Symbian, Palm OS, WinCE, etc.
  • Tamaño reducido: código de 73 KB y menos de 2 KB de datos para implementar una aplicación de cliente de servicio web XML (sin DOM para limitar el uso de memoria).
  • Rápido: no crea lo que afirman otras herramientas, la verdadera velocidad debe medirse con E / S. Para gSOAP, hay más de 3000 mensajes XML de ida y vuelta a través de TCP / IP. La tara de análisis XML es insignificante ya que es un escaneo lineal simple de la entrada / salida mientras se lleva a cabo la (de) serialización.
  • Soporte XML: importación / exportación de esquema XML (XSD), importación / exportación WSDL, espacios de nombres XML, canonicalización de XML, XML con archivos adjuntos (MIME), uso opcional de DOM, muchas opciones para producir XML con sangría, uso de cadenas UTF8, etc.
  • Validación XML: parcial y completa (opción)
  • Soporte de WS: WS-Security, WS-ReliableMessaging, WS-Addressing, WS-Policy, WS-SecurityPolicy y otros.
  • Depuración: gestión de memoria integrada con detección de fugas, registro.
  • API: no hay API que aprender, solo inicialización del contexto del motor “soap”, luego use la interfaz de lectura / escritura para sus datos y destrucción del contexto del motor “soap”.

Por ejemplo:

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

A continuación, ejecute “soapcpp2” en la statement de la clase Address anterior para generar soap_read_Address y soap_write_Address lector y escritor XML, por ejemplo:

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

Esto produce una representación XML de la Address a objeto. Al anotar las declaraciones del archivo de encabezado con los detalles del espacio de nombres XML (que no se muestran aquí), las herramientas también generan esquemas. Este es un ejemplo simple. Las herramientas gSOAP pueden manejar una amplia gama de tipos de datos C y C ++, incluidas estructuras vinculadas basadas en punteros e incluso gráficos (cíclicos) (en lugar de solo árboles).

Espero que esto ayude.

TinyXML puede ser lo mejor para el trabajo XML simple, pero si necesita más funciones, intente con Xerces del proyecto apache. Vaya a la siguiente página para leer más sobre sus características.

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

Soy un novato en C ++ y después de probar un par de sugerencias diferentes en esta página debo decir que me gusta más pugixml . Tiene documentación fácil de entender y una API de alto nivel que era todo lo que estaba buscando.

TinyXML y también Boost.PropertyTree. Este último no cumple con todos los requisitos oficiales, pero es muy simple.

Me gusta el analizador Gnome xml. Es de código abierto (licencia MIT, por lo que puede usarlo en productos comerciales), es rápido y tiene interfaces basadas en DOM y SAX.

http://xmlsoft.org/

Pruebe TinyXML o IrrXML … Ambos son analizadores XML ligeros (sugiero que use TinyXML, de todos modos).