[ADVUCA] Trabajar con XML desde C++

671 views
Skip to first unread message

Rabbit Bodom

unread,
May 5, 2010, 3:56:43 AM5/5/10
to adv...@googlegroups.com
Buenas, compañeros:

Lo primero, me presento, que es mi primer mensaje en el grupo. Soy Ezequiel Vázquez (Zeki para los colegas), y estoy cursando la asignatura de Diseño de Videojuegos este año.

La cuestión es que, para nuestro proyecto, necesitamos cargar archivos XML para trabajar con los datos en C++, y la verdad es que estamos algo perdidos. Si alguien pudiera echarnos una mano (sobre todo con la carga de datos, a priori no nos interesa el guardado de datos en un archivo XML), se agradecería mucho. Al menos un enlace a algún tutorial sencillo, o algo así, no queremos el trabajo hecho, jeje. Y ya, si alguien tiene hecho algo que podamos reutilizar, pues sería un pelotazo (xD).

Bueno, un saludo a todos. Nos vemos por los foros.


Subir, organizar y compartir documentos online, está a un clic de tu bandeja de entrada. Ver más

--
Has recibido este mensaje porque estás suscrito al grupo "ADVUCA" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a adv...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a advuca+un...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/advuca?hl=es.

Pablo Recio Quijano

unread,
May 5, 2010, 4:16:06 AM5/5/10
to adv...@googlegroups.com
Buenas,

Si lo que quereis es solamente leer datos, os recomiendo TinyXML [1]. Es una biblioteca muy sencilla que te permite extraer datos de un fichero XML con pocas funciones, y además es muy liviana. La documentación oficial está muy completita, la verdad.

Un saludo.

[1] http://www.grinninglizard.com/tinyxmldocs/index.html
--
Pablo Recio Quijano

Estudiante de Ingeniería Informática (UCA)
Alumno colaborador del Departamento de Lenguajes y Sistemas Informáticos
Participante del IV Concurso Universitario de Software Libre

José Tomás Tocino García

unread,
May 5, 2010, 4:16:49 AM5/5/10
to adv...@googlegroups.com
Buenas,

En mi proyecto (http://oflute.wordpress.com) estoy utilizando la
librería TinyXML para cargar y parsear los XML y la verdad es que me
va muy bien. La página oficial es
http://www.grinninglizard.com/tinyxml/ , en la documentación hay
multitud de ejemplos y el funcionamiento es realmente sencillo.

En mi blog tienes un ejemplo del tipo de XML que estoy usando
http://oflute.wordpress.com/2010/04/19/lecciones-xml-driven/ y en el
svn puedes ver el código,
https://forja.rediris.es/plugins/scmsvn/viewcvs.php/branches/unidadLeccion/leccion.h?root=cusl4-oflute&view=markup

Creo que está bastante comentado, pero en resumen la cosa se limita a

//Crear un nuevo documento XML y cargar el archivo
TiXmlDocument doc;

// Intentamos leer y cargar el fichero en el objeto XML
if(!doc.LoadFile(ruta)){
cerr << "#### ERROR al intentar abrir el fichero '" << ruta << "'." << endl;
/// @todo Arreglar el control de errores cuando no existe el XML
throw 42;
}

// Los manejadores TiXmlHandle facilitan el control de errores al leer
XML's inválidos
TiXmlHandle manejador(&doc);

// Leemos el nodo <index>
TiXmlElement * elemento =
manejador.FirstChild("Lec").FirstChild("index").ToElement();
indice = boost::lexical_cast<int>(elemento -> GetText());

cout << "Índice: " << indice << endl;

// Leemos el nodo <nombre>
elemento = manejador.FirstChild("Lec").FirstChild("nombre").ToElement();
nombre = elemento -> GetText();

Y para leer los atributos usar QueryIntAttribute, QueryStringAttribute, etc.

Saludos.

El día 5 de mayo de 2010 09:56, Rabbit Bodom
<dragon...@hotmail.com> escribió:
--
José Tomás Tocino García

David Saltares Márquez

unread,
May 5, 2010, 5:14:10 AM5/5/10
to adv...@googlegroups.com
Buenas,

En Granny's Bloodbath utilizamos también un Parser que usa ticpp (una versión mejorada de TinyXML). En el port para PSP hemos cambiado la implementación (sin afectar a la interfaz) usando TinyXML. ¿Qué más puedo añadir que no hayan dicho ya mis compañeros? Puedes consultar si lo deseas la forja de nuestro proyecto [1] y servirte de lo que haya por allí. Si tienes más dudas coméntalo por aquí.

[1] https://forja.rediris.es/projects/grannybloodbath/

¡Saludos y suerte!

raistmort

unread,
May 5, 2010, 5:30:15 AM5/5/10
to adv...@googlegroups.com
Buenas a todos,

Me alegra que la lista haya vuelto a la vida =). Para el que no me
conozca soy estudiante de Ingeniería Informática y mi PFC no es un
videojuego :D. Cuando cursé DV hicimos un conato de aventura gráfica
llamado EBOP (En busca del Ostión Perdido)
http://code.google.com/p/cadiz3012/. Podeis compilarlo y podreis jugar
una única y maravillosa escena :P.

Hechas las presentaciones, volvamos a lo que nos ocupa. No sé cuales son
vuestros propositos para utilizar XML, pero quizá debais conseiderar ó
evaluar
utilizar otros lenguajes algo más flexibles y compactos como YAML
(http://code.google.com/p/yaml-cpp/) y su subconjunto famoso JSON
(http://jsoncpp.sourceforge.net/) , especialmente si vuestro objetivo no
es la descripción de algo sino la serialización.

Quiero recalcar que no he probado ninguna de esas dos bibliotecas, sólo
queria ponerlas encima de la mesa por si a alguien le apetece probarlas
y así nos da su impresión.

Un saludo!
C-x C-c

Pablo Recio Quijano

unread,
May 5, 2010, 6:02:31 AM5/5/10
to adv...@googlegroups.com
Yo tampoco puedo dar mi opinión sobre YAML y JSON, pero una compañera que está realizando su PFC, está usando yaml-cpp y por lo que me comenta es muy muy sencillo de usar. Por lo visto simplemente hay que definir operadores de extracción e inserción en un formato dado.

Otra posibilidad es usar serialización. Libboost (conjunto de bibliotecas con features que se añadirán al próximo estándar de C++) trae una parte para serializar objetos de una forma muy simple [1]. En mi grupo fué lo que utilizamos el año pasado en el proyecto NoCKtMetal [2], y la verdad que era muy simple.

De todas formas, si lo que quereis es leer de unos XML dados, serializar no es la mejor opción. Si lo que quereis es persistencia de objetos, si creo que es la mejor opción :)

Un saludo.

[1] http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/index.html
[2] http://nocktmetal.forja.rediris.es/
--
Pablo Recio Quijano

Estudiante de Ingeniería Informática (UCA)
Alumno colaborador del Departamento de Lenguajes y Sistemas Informáticos
Participante del IV Concurso Universitario de Software Libre

Carlos Belizón Ibáñez

unread,
May 5, 2010, 8:22:21 AM5/5/10
to ADVUCA
No sé, si estaréis usando SDL o algún tipo de librería parecida para
desarollar, pero en caso de que tengáis "uso libre" de cualquier tipo
de librería o engine os recomiendo usar Kyra (Basado en SDL):

http://www.grinninglizard.com/kyra/index.html

Es muy sencillo de usar y ahorra mucho trabajo.

Un saludo.

On 5 mayo, 12:02, Pablo Recio Quijano <pablo.recioquij...@gmail.com>
wrote:
> Yo tampoco puedo dar mi opinión sobre YAML y JSON, pero una compañera que
> está realizando su PFC, está usando yaml-cpp y por lo que me comenta es muy
> muy sencillo de usar. Por lo visto simplemente hay que definir operadores de
> extracción e inserción en un formato dado.
>
> Otra posibilidad es usar serialización. Libboost (conjunto de bibliotecas
> con features que se añadirán al próximo estándar de C++) trae una parte para
> serializar objetos de una forma muy simple [1]. En mi grupo fué lo que
> utilizamos el año pasado en el proyecto NoCKtMetal [2], y la verdad que era
> muy simple.
>
> De todas formas, si lo que quereis es leer de unos XML dados, serializar no
> es la mejor opción. Si lo que quereis es persistencia de objetos, si creo
> que es la mejor opción :)
>
> Un saludo.
>
> [1]http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/index.html
> [2]http://nocktmetal.forja.rediris.es/
>
> El 5 de mayo de 2010 11:30, raistmort <raistm...@gmail.com> escribió:
>
>
>
> > Buenas a todos,
>
> > Me alegra que la lista haya vuelto a la vida =). Para el que no me conozca
> > soy estudiante de Ingeniería Informática y mi PFC no es un videojuego :D.
> > Cuando cursé DV hicimos un conato de aventura gráfica llamado EBOP (En busca
> > del Ostión Perdido)http://code.google.com/p/cadiz3012/. Podeis compilarlo
> > y podreis jugar una única y maravillosa escena :P.
>
> > Hechas las presentaciones, volvamos a lo que nos ocupa. No sé cuales son
> > vuestros propositos para utilizar XML, pero quizá debais conseiderar ó
> > evaluar
> > utilizar otros lenguajes algo más flexibles y compactos como YAML (
> >http://code.google.com/p/yaml-cpp/) y su subconjunto famoso JSON (
> >http://jsoncpp.sourceforge.net/) , especialmente si vuestro objetivo no es
> > la descripción de algo sino la serialización.
>
> > Quiero recalcar que no he probado ninguna de esas dos bibliotecas, sólo
> > queria ponerlas encima de la mesa por si a alguien le apetece probarlas y
> > así nos da su impresión.
>
> > Un saludo!
> > C-x C-c
>
> > --
> > Has recibido este mensaje porque estás suscrito al grupo "ADVUCA" de Grupos
> > de Google.
> > Para publicar una entrada en este grupo, envía un correo electrónico a
> > adv...@googlegroups.com.
> > Para anular tu suscripción a este grupo, envía un correo electrónico a
> > advuca+un...@googlegroups.com<advuca%2Bunsu...@googlegroups.com>

Rabbit Bodom

unread,
May 5, 2010, 12:08:51 PM5/5/10
to adv...@googlegroups.com
Gracias a todos, le he echado un vistazo a la librería TinyXML, lo cierto es que encaja con lo que andábamos buscando.

Sobre nuestro proyecto, pues comentar que es un juego de plataformas (concretamente, un Run&Gun, a lo Metal Slug), y necesitamos leer de un archivo XML las coordenadas de las plataformas de una fase dada. Estamos interesados principalmente en este formato de archivo por aquello de la facilidad para crear fases nuevas, ya sabéis, reusabilidad. Utilizamos SDL, y bueno, de momento no va tan mal.

Os dejo el enlace a la forja del proyecto, por si queréis echarle un vistazo.

Enlace a la Forja: https://forja.rediris.es/projects/spacepenguin/



Ahora Hotmail te da 25 GB gratis. El complemento de espacio que te estaba faltando. Descúbrelo aquí

David Saltares Márquez

unread,
May 5, 2010, 12:37:13 PM5/5/10
to adv...@googlegroups.com
Puede que no queráis complicaros la cabeza pero ya que incluís un parser XML quizás os interese usar Tiled [1]. La comenté en el campus de DV, es una herramienta para crear escenarios basados en tiles. Al final lo que hace es generar un fichero XML que podríais cargar en vuestra aplicación. Es lo que nosotros usamos en Granny's.

Simplemente por si os pudiera ser útil.

[1] http://www.mapeditor.org/

Peregring-lk

unread,
May 6, 2010, 8:53:06 AM5/6/10
to ADVUCA
On 5 mayo, 12:02, Pablo Recio Quijano <pablo.recioquij...@gmail.com>
wrote:
> Otra posibilidad es usar serialización. Libboost (conjunto de bibliotecas
> con features que se añadirán al próximo estándar de C++) trae una parte para
> serializar objetos de una forma muy simple [1]. En mi grupo fué lo que
> utilizamos el año pasado en el proyecto NoCKtMetal [2], y la verdad que era
> muy simple.

Bueno, eso de simple, no se yo que decirte en xD. Es simple si
comparamos la proporción entre lo que tienes que hacer, y lo que la
biblioteca te hace. Tienes que hacer muy poco en comparación con todas
las cosas que te hace él, sobre todo el referido a la serialización de
punteros y estructuras, es una auténtica maravilla.

Pero boost no es sencillo de aprender. Hay que hechar una tarde entera
como mínimo para entender bien la forma de trabajar con boost. Yo la
verdad es que tuve que pelearme bastante, y como mi juego tenía muchas
estructuras complejas y quería integrar la serialización cuando el
juego estaba casi terminado, al final boost me venció a mí.
Serializando las clases a medida que se van programando, simplifica
muchísimo el proceso. Aún así, para entender bien la serialización hay
que hechar un rato, y si no tienes que serializar estructuras
demasiado complejas ni punteros, es decir, si solo tienes que
serializar tipos primitivos, o estructuras que solo tienen tipos
primitivos, quizás con TinyXML tienes mas que de sobra.

C-x C-c,
Peregring-lk

Mortanius_

unread,
May 6, 2010, 1:07:35 PM5/6/10
to adv...@googlegroups.com
Vamos a iniciar una tradición en la lista, declaro el Jueves como el día
feliz.

vía meneame

http://kotaku.com/5531665/if-super-mario-bros-was-made-in-2010
Reply all
Reply to author
Forward
0 new messages