sábado, 25 de abril de 2015

Mostrar datos de un archivo XML en irrlicht



1.- Creamos un archivo de texto y le cambiamos la extension y le ponemos .xml, ahora rellenaremos con los siguientes datos.



2.- Aqui el ejemplo de como mostrar los datos del XML
#include <irrlicht.h>
#include <iostream>

using namespace std;

//los namespace para definir funciones de irrlicht
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

#ifdef _IRR_WINDOWS_
#pragma comment(lib, "Irrlicht.lib")
#endif


int main()
{
 //define un device para la pantalla
 IrrlichtDevice *device = createDevice(EDT_NULL, dimension2d<u32>(0, 0), 16, false);

 //en caso de error
 if (!device)
  return 1;

 //Para ponerle un titulo a la ventana
 device->setWindowCaption(L"Mostrando datos de un archivo XML en Irrlicht");

 //Creamos el archivo
 IFileSystem *fileSystem = device->getFileSystem();

 //Creo un lector de xml para poder leer el archivo XML
 IXMLReader *xml = fileSystem->createXMLReader("jugador.xml");

 //Declaro mis cadenas para mostrar los datos cargados del xml
 stringc nombreJugador = "Nombre: ";
 stringc nivel = "Nivel: ";
 stringc salud = "Salud: ";
 stringc exp = "EXP: ";
 stringc mensaje = "Mensaje: ";

 //Leera el xml
 while (xml && xml->read())
 {
  //Para obtener un tipo de nodo del xml
  switch (xml->getNodeType())
  {
  case EXN_ELEMENT:
  {
   //declaro un nombre de nodo para poder recoger los datos de mis nodos en mi xml
   stringc nombreNodo = xml->getNodeName();

   //si el nodo es igual al nodo de mi xml carga el valor del atributo de mi xml
   if (nombreNodo.equals_ignore_case("jugador"))
   {
    nombreJugador.append(xml->getAttributeValue(L"nombre"));
    cout << nombreJugador.c_str() << endl;
   }

   //si el nodo es igual al nodo de mi xml carga el valor del atributo de mi xml
   else if (nombreNodo.equals_ignore_case("nivel"))
   {
    xml->read();
    nivel.append(xml->getNodeData());
    cout << nivel.c_str() << endl;
   }

   //si el nodo es igual al nodo de mi xml carga el valor del atributo de mi xml
   else if (nombreNodo.equals_ignore_case("salud"))
   {
    xml->read();
    salud.append(xml->getNodeData());
    cout << salud.c_str() << endl;
   }

   //si el nodo es igual al nodo de mi xml carga el valor del atributo de mi xml
   else if (nombreNodo.equals_ignore_case("exp"))
   {
    xml->read();
    exp.append(xml->getNodeData());
    cout << exp.c_str() << endl;
   }

   //si el nodo es igual al nodo de mi xml carga el valor del atributo de mi xml
   else if (nombreNodo.equals_ignore_case("mensaje"))
   {
    xml->read();
    mensaje.append(xml->getNodeData());
    cout << mensaje.c_str() << endl;
   }
  }

  break;

  default:
   break;
  }
 }

 cout << endl;

 //elimino de la memoria mi xml creado
 delete xml;

 //cerrar device
 device->drop();

 system("pause");
 return 0;
}



No hay comentarios:

Publicar un comentario