Estoy trabajando en un proyecto para un sistema embebido que el uso de XML para la obtención de datos dentro y fuera del sistema. No quiero que el XML manejo de recaer en un montón de bits que construir cadenas XML utilizando snprintf()/strcat() y amigos o análisis de XML por contar «<» y «>» caracteres.

He encontrado varios XML bibliotecas, un par de los que incluso podrían ser lo suficientemente pequeño, pero el más cercano de los que vienen a C es C++, que no está en las cartas para este sistema. Tengo la esperanza de que pueda encontrar una librería XML que cumpla las siguientes limitaciones:

  • De código fuente de C
  • no asignación dinámica de memoria
  • barato. Gratis es mejor, pero el copyleft no hará el truco.

No tiene que ser un completo analizador – yo sólo quiero ser capaz de tirar de texto de los elementos anidados y han razonablemente una forma sencilla para generar XML que no dependen de las cadenas de formato. Los atributos no están siendo utilizados (aún), por lo que la biblioteca no necesita el apoyo de ellos incluso. Los documentos XML va a ser bastante pequeña, por lo tanto, algo que DOM-como iba a estar bien, como siempre que voy a trabajar con el cliente siempre buffers (parsear el XML sin formato en lugar estaría bien).

PugXML y TinyXML vistazo a estar muy cerca, pero tengo la esperanza de que hay alguien que sabe acerca de un XML lib hecho a la medida para C-sistemas embebidos basados en que mi googlear falta.

  • Es posible que los autores de algunos de «copyleft» las bibliotecas podrían estar dispuestos y capaces de vender una alternativa comercial licencia de uso de su código.
  • Si yo estuviera en tu posición, debido a las limitaciones de los sistemas embebidos, yo estaría considerando seriamente la posibilidad de alternativas a XML. Dependiendo de la naturaleza de los datos, bien podría haber mejores formas de encapsular los datos que no requieren tanta sobrecarga de procesamiento tanto para la generación y análisis.
  • Tuvimos situación similar, y no podía encontrar cualquier pequeño lib así que terminé de escribir uno para el sistema embebido con el tamaño del binario < 20K pero utiliza montón. Sólo admite caracteres ASCII con el espacio de nombres. Me gustaría poder ayudarle, pero su propietaria 🙁
  • Me he dado cuenta de que JSON es una buena alternativa y no requiere de nucht menos effert parsing de XML. Un analizador no ser que compicated a escribir y que podría llegar a lo largo de sólo con pila, pero hay un montón fácilmente.
  • He intentado [ezxml ][1] es muy fácil y perfecto de la biblioteca C para sistemas embebidos, se puede utilizar tanto para la construcción y análisis de XML [1]: ezxml.sourceforge.net
InformationsquelleAutor Michael Burr | 2009-07-15

6 Comentarios

  1. 13

    Yo no sé acerca de la asignación dinámica de memoria, pero un estándar de C XML parser es expat, que es la biblioteca subyacente para un número de analizadores de allí.

    • Siempre he tenido buenas experiencias con los Expatriados. Escrito en el estándar de C, por lo que debería puerto a cualquier plataforma con bastante facilidad. Su un flujo analizador de modo que no debería comer toda tu memoria la construcción de un DOM. Hay que acostumbrarse a la ‘callback’ API pero es bastante simple cuando usted consigue la caída de ella. Recomendado!
    • Expat hace algunos asignación dinámica de memoria. El código es bastante localizado sin embargo, y usted podría ser capaz de reimplementar. Es una muy buena analizador XML.
    • Si utiliza el XML_ParserCreate_MM para crear un analizador, se hará uso de las implementaciones de malloc y free que usted proporcione.
  2. 4

    No estoy seguro, pero tal vez Mini-XML: XML Ligero de la Biblioteca le ayudará a:

    1. Mini-XML que sólo requiere una norma ANSI C compatible compilador.
    2. Es que es freeware.
    3. Su binario tamaño es de alrededor de 100k.
    4. Se analiza el conjunto de xml-archivo y, a continuación, almacenar toda la información en una lista enlazada.
    • Se ve como de código abierto, no sólo freeware 🙂 diferencia Importante
  3. 1

    He escrito sxmlc a ser tan simple como sea posible y sé que la gente la use en los routers, para realizar en el lugar de análisis de las consultas web.

    Por desgracia (y yo estoy de 5 años de retraso…) se hace uso de la asignación de memoria, a pesar de mantenerse en un mínimo: un buffer para leer cada «XML» de línea (lo que se encuentra entre < y >, lo siento ;)), y muchos pequeños buffer para guardar la pista de el nombre de la etiqueta, los nombres de los atributos y valores, y el texto (aunque siempre he querido usar char[16] o así que para aquellos).

    Y se hace uso de strdup/strcpy y tal.

    Como quiero que nadie puede usar libremente, la licencia BSD.

  4. 0

    Xerces-C de la biblioteca sería óptimo a utilizar, en este escenario.

    Si es que va a ser bastante pequeña XML, ¿por qué no generar a través de programación, usando sprintf o de otras cosas y el uso de la cadena de extracción de funciones para analizar la misma. Pero como se mencionó anteriormente, si poco grande, sugerimos el uso de Xerces-c de la Biblioteca, como es de código abierto

    • Xerces-C es bastante grande y por escrito en C++

Dejar respuesta

Please enter your comment!
Please enter your name here