2011-01-13 10 views
7

Conozco al menos tres analizadores ligeros de C++ XML: RapidXML, TinyXML y PugiXML. Sin embargo, los tres usan una interfaz basada en DOM (es decir, crean su propia representación en memoria del documento XML y luego proporcionan una interfaz para recorrerla y manipularla). Para la mayoría de las situaciones con las que tengo que lidiar, prefiero la interfaz SAX (donde el analizador simplemente arroja una secuencia de eventos como el inicio de la etiqueta, y el código de la aplicación es responsable de hacer lo que quiera basándose en esos eventos) .Analizador ligero XML C++ SAX

¿Alguien puede recomendar una biblioteca ligera de C++ XML con una interfaz SAX?

Editar: También debería tener en cuenta la biblioteca Microsoft XmlLite, que hace utilizar una interfaz SAX (bueno, en realidad una interfaz de "extracción" que es posiblemente aún mejor). Desafortunadamente, está descartado para mí en este momento ya que, por lo que sé, es de código cerrado y solo de Windows (corrígeme si me equivoco al respecto).

+0

https://github.com/ igagis/mikroxml – igagis

Respuesta

5

He usado expat cuando necesitaba analizar XML. Es muy liviano (bueno, solía ser, hace tiempo que no hago XML) y hace el trabajo.

+0

Debo admitir que no le di a expatriado la atención que merecía. ¿Lo usas con un contenedor C++? ¿Si es así, Cuál? –

+0

@John: Me tomó un tiempo recordarlo, pero cuando lo hice, utilicé este: http://beta.codeproject.com/KB/XML/expatimpl.aspx. Pero esa era solo una envoltura muy delgada y ahora está seriamente desactualizada. – sbi

+0

De acuerdo. Parece que el expatriado es razonable, incluso si pongo mi propio envoltorio de C++ sobre él. –

0

PugiXML y RapidXML no tienen interfaces compatibles con DOM ... esas API tienen graves limitaciones en funcionalidades y conformidad. Es posible que desee investigar VTD-XML que es significativamente más avanzado que DOM o SAX/Pull

5

puede probar http://die-xml.googlecode.com/. parece ser muy pequeño y fácil de usar

este es un analizador XML SAX de código abierto de C++ 0x recientemente hecho y el autor es evaluaciones dispuestos

se analiza un flujo de entrada y genera eventos en devoluciones de llamada compatibles con std :: función

la máquina de pila utiliza autómatas finitos como backend y algunos eventos (etiqueta de inicio y de texto nodos) utilizan iteradores con el fin de minimizar el almacenamiento temporal, por lo que es bastante ligero

Cuestiones relacionadas