2009-05-08 23 views
9

Me gusta hacer mi programación del lado del servidor en C, pero necesito interoperar con algunos XML.XML to C struct y C struct to XML

Lo que necesito escribir es alguna función que, dada una estructura C, o estructura anidada, y otra estructura (o estructuras anidadas) que describe los elementos en la estructura C, la escupe como XML. Y otra función que lee el XML, verifica que coincida con la descripción de las estructuras C y rellena las estructuras C.

Estoy bastante seguro de que esto se ha hecho muchas veces, pero hay tanta información sobre XML que no estoy teniendo suerte escribiendo una consulta de Google que no devuelve muchas cosas sin relación .

No estoy buscando una biblioteca, solo unos cientos de líneas de código C para analizar el XML.

+2

De acuerdo que C no es la elección correcta para una aplicación web completamente nueva, pero ¿y si tiene una base de código bien establecida? No siempre tenemos el lujo de comenzar de nuevo, incluso si comenzar de nuevo haría las cosas más fáciles a largo plazo. – snowcrash09

+0

Porque a veces mis cosas llegan a la portada de sitios como digg.com, y no me entusiasma gastar mucho en hosting potente. También realmente reduce las dependencias, lo que hace que sea bueno cuando alguien autoriza el código (lo que también ocurre de vez en cuando). Pero estoy de acuerdo: cada vez que comienzas a llamar malloc() mucho, C no es el idioma correcto. Por eso generalmente hago mis cadenas de longitud fija y evito malloc. –

+0

@JoshPetitt Definitivamente hay situaciones en las que C es una gran elección, pero el OP implicaba que no se le está * obligado * a usar C para este proyecto, comenzando su pregunta con "I * like * para hacer mi programación del lado del servidor en C ", en oposición a" I * must * use C para este proyecto."No estaba tratando de comenzar una guerra de idiomas, y podría haber formulado mi primer comentario de una manera menos confrontativa. Lo siento si se equivocó. –

Respuesta

1

Supongo que no hay realmente algo disponible que pueda usar, así que escribí un analizador XML simple en C.
Es lo suficientemente bueno para mi necesidad, pero también es solo 350 líneas de código C.

+0

Escribiendo un analizador XML en C ??? Idea muy extraña Ya hay varios muy buenos. Ver http://stackoverflow.com/questions/399704/xml-parser-for-c – bortzmeyer

+3

No estaba preparado para incluir muchas dependencias y bibliotecas que duplicarían el tamaño de mi proyecto. –

1

Una forma de hacerlo si no encuentra ninguna biblioteca prefabricada o código es escribir una función toXML() como las funciones usuales toString(). Entonces, un toStruct (char *) que deserializa el XML de nuevo en la estructura

+1

Sí, algo así. Y eso es lo que espero evitar tener que escribir si hay un código que lo haga. –

2

No podrá analizar XML en el caso general en solo unos cientos de líneas de código. Existen varias bibliotecas de analizadores XML, de las cuales me viene a la mente expat. Expat fue escrito en C, y tiene una API amigable para C.

Serialización es probable que sea más fácil, suponiendo que no se vuelve loco con los tipos de datos que admite.

De cualquier manera, cuando esto le va a causar dolores de cabeza es en el mantenimiento de la correspondencia entre el diseño struct y el esquema XML.

Es posible que desee buscar en bibliotecas como SCEW que pretenden ocultar la naturaleza de eventos de la implementación de expat y presentar algo más como un árbol DOM. También hay varias bibliotecas que implementan SOAP encima de expat, y que necesariamente tienen que manejar la recopilación de datos dentro y fuera de los paquetes XML.

+0

Bueno, analizando el XML es la parte fácil (y hay muchas bibliotecas que son más fáciles que expat como libxml). La parte difícil es la asignación/conversión bidireccional entre las estructuras C y XML. – bortzmeyer

+0

La buena serialización siempre es más difícil y se ve, no importa cuál sea el protocolo subyacente. En mi humilde opinión, XML hace que una buena serialización sea aún más difícil de hacer bien, pero eso es solo por mi experiencia personal. Su kilometraje variará, probablemente considerablemente. – RBerteig

+0

@RBerteig, ¿tiene algún recurso para el diseño de la estructura y el esquema XML? Creo que este es el quid de la cuestión (y la mía también). Idealmente, estoy buscando el subconjunto de XML que siempre se correlacionará con una estructura C y viceversa. Me doy cuenta de que el documento XML y la estructura C son fundamentalmente diferentes. Sin embargo, espero encontrar un terreno común entre los dos que pueda usarse como una especificación. –

3

Él no está pidiendo un analizador XML. Él está pidiendo una biblioteca que serializa/deserializa automáticamente una estructura C compleja desde y hacia XML (que obviamente dependería de un analizador XML de abajo).

Libpdel es antiguo pero tiene soporte para hacer lo que quiera (a través de las "estructuras").