Blog

Mostrar información de un archivo XML

Jul 01, 2009 | Español | By Crysfel | 6 Comments

El día de hoy voy a mostrar como cargar información en un grid a partir de un archivo XML, esto es muy sencillo de realizar y útil a la hora de desarrollar aplicaciones.

Mostrar información de un archivo XML
Author: Crysfel

I'm a software developer with 6+ years of experience, when I'm not developing software I may be writing a tutorial, you can follow me on twitter

Material de apoyo

Para continuar necesitamos descargar el material de apoyo, y copiar los tres archivos dentro de nuestro servidor Web, hemos estado trabajando dentro de la carpeta “curso” donde ya tenemos la librería de Ext JS y además ya creamos una carpeta que se llama “grids” para este capitulo.

Antes de continuar puedes ver la demostración de lo que vamos a estar haciendo en este tutorial.

gridpanel

Ejemplo final

Empaquetando el código

Ya sabemos que empaquetar nuestro código es una muy buena práctica, así que vamos a crear el namespace o “paquete” para este tutorial.

Ext.ns('com.quizzpot.tutorial');

com.quizzpot.tutorial.GridXmlTutorial = {
	init: function(){
		//code goes here
	}
}

Ext.onReady(com.quizzpot.tutorial.GridXmlTutorial.init,com.quizzpot.tutorial.GridXmlTutorial);

El XML a utilizar

Vamos a utilizar XML como nuestra fuente de datos, estos datos pueden estar contenidos en una base de datos, un servicio Web, un archivo, etc. Para hacer las cosas más sencillas en este ejemplo he puesto la información directamente en el código fuente de la siguiente manera:

<?php
	header("Content-Type: text/xml"); 

	echo '<?xml version="1.0" encoding="UTF-8"?>';
?>

<people>
	<person>
		<name>Jack Slocum</name>
		<age>32</age>
		<position>Chief Software Architect and Founder</position>
		<company>Ext JS</company>
	</person>
	<person>
		<name>Sasha Cohen</name>
		<age>24</age>
		<position>Figure Skating</position>
		<company></company>
	</person>
	<person>
		<name>John Resig</name>
		<age>24</age>
		<position>JavaScript Developer</position>
		<company>Mozilla Corporation</company>
	</person>
	<person>
		<name>Sara Mcfly</name>
		<age>35</age>
		<position>Tester</position>
		<company>Google</company>
	</person>
	<person>
		<name>Crysfel Villa</name>
		<age>25</age>
		<position>Software Developer</position>
		<company>JWM Solutions</company>
	</person>
	<person>
		<name>Felicia Day</name>
		<age>30</age>
		<position>Actress</position>
		<company></company>
	</person>
	<person>
		<name>Collis Ta'eed</name>
		<age>29</age>
		<position>CEO</position>
		<company>Envato</company>
	</person>
</people>

El registro “Person”

Vamos a desplegar en el grid la información contenida en el XML, estos son datos de personas, por lo tanto vamos a crear el registro “Person” y ‘mapearlo’ con el nodo “person” del XML.

var Person = Ext.data.Record.create([
	{name: 'name'},
	{name: 'position'},
	{name: 'age', type:'float'},
	{name: 'company'}
]);

Crear el “Reader”

Ahora vamos a crear el “lector” que le asignaremos al “store”:

var reader = new Ext.data.XmlReader({
	record: "person"
}, Person);

Aquí solamente hemos definido en la configuración del “reader” la propiedad “record” y le hemos asignado el valor “person”, con esto el “reader” será capaz de ir a los nodos “person” (en el XML) y extraer la información contenida en el objeto “Person” que definimos anteriormente.

Crear el Store y cargar la información

El siguiente paso es crear el “Store” y cargar la información del XML, esto se hace de la siguiente manera:

var store = new Ext.data.Store({
	url: 'xml.php',
	reader: reader
});

store.load();

Primero se define la “url” donde se va a buscar el XML mediante Ajax, el segundo parámetro de configuración es asignarle el “reader” al “Store”.

Una vez creado el store podemos utilizar el método “load” para realizar la petición “Ajax” y recibir la información.

Hasta aquí solamente hemos definido la fuente de datos, haciendo las configuraciones necesarias. Si no te ha quedado clara esta parte del “Store”, te recomiendo estudiar el tema donde hablamos específicamente de este componente.

Crear el Grid

Una vez que tenemos lista la información a desplegar en la tabla ya podemos comenzar a crear el grid de la siguiente manera:

var grid = new Ext.grid.GridPanel({
	store: store, //le asignamos la fuente de datos
	columns: [ //creamos las columnas
		new Ext.grid.RowNumberer(), //numeramos las filas
		{header:'Name', dataIndex:'name',sortable: true},
		{header:'Company', dataIndex:'company',sortable: true},
		{header:'Position', dataIndex:'position',width:230,sortable: true},
		{header:'Age', dataIndex:'age', width:40,sortable: true}
	],
	border: false, //le quitamos el borde
	stripeRows: true //le asignamos rayas a las filas
});

Con esa sencilla configuración creamos una tabla muy básica pero atractiva, ya hemos estudiado este código en el tema anterior, pero a manera de repaso voy a mencionar las propiedades utilizadas:

“store”: En esta propiedad se define la fuente de datos a utilizar en el grid.
“columns”: Se definen las columnas que tendrá el grid, esta parte es muy importante pues aquí se relacionan las columnas y su información a mostrar (dataIndex).
“border”: Esta propiedad se hereda del componente Panel y al asignarle “false” le quitamos el borde exterior, esto lo hacemos porque vamos a meter el grid en una ventana.
“stripeRows”: Nos permite ver unas rayas en las filas, esto hace que sea más fácil visualizar la información.

Crear la ventana

Por último vamos a meter el grid dentro de una ventana:

var win = new Ext.Window({
	title: 'Grid example',
	layout: 'fit', // <---
	width: 510,
	height:350,
	items: grid
});

win.show();

Lo único importante en esta configuración y que probablemente no sabemos (si hemos tomado este curso desde el principio) es la configuración “layout” a la cual le estamos asignando “fit”, esto es para que la tabla ocupe el cien por ciento de la ventana, de lo contrario el grid no se desplegará completamente, más adelante voy a tratar el tema de los layouts.

gridpanel

Si todo ha salido bien, veras esta pantalla

Conclusiones

Hemos visto lo sencillo que es desplegar información de un XML en un grid, además hemos apreciado la ingeniería con que está realizada la librería de Ext JS, porque la creación del grid es la misma para los diferentes formatos (XML, JSON, Array), lo único que hemos cambiado ha sido el “Store” y el grid funciona igual, esto es una ventaja en cuanto a el mantenimiento de sistemas se refiere.

Si tienes dudas, comentarios o sugerencias por favor háznoslos llegar a través de los comentarios en este blog o si lo prefieres te puedes inscribir en el foro donde una comunidad muy activa está iniciando, además te invito a que te inscribas a las feeds o por correo para estar al tanto de las actualizaciones.

6 Responses to “Mostrar información de un archivo XML”

  • jucahoca Jul 02, 2009

    Como crítica constructiva yo hubiera añadido al ejemplo el mapeo de algun dato que estuviera como atributo en el XML. Por ejemplo con lo cual quedaría como { name=”age”, mapping=”@age”, type=”float”}

  • jucahoca Jul 02, 2009

    Lo siento el ejemplo del xml no se ve, lo intento otra vez:

    >person age=”24″<

  • Andres Jan 19, 2010

    Encuentro muy bueno el articulo, para quiénes estamos descubriendo los beneficios de Extjs… pero, hice el ejemplo, y tampoco me funciono el xml, no se ve… ¿Alguien sabe porque?
    Saludos

    • Crysfel Jan 19, 2010

      Estas utilizando un servidor web? tienes definas las rutas a la librería de ExtJS correctamente?

      saludos

  • ragdezyklon May 17, 2010

    Saludos amigo, como hago para conectar desde un boton en un formulario ajax a un archivo php que me generará un archivo xml?

Leave a Reply







Updates

RSS

Subscribe to our feeds to receive updates of our newest posts and free tutorials.

Site search

Maybe we have what you need, would you like to search first?

Donations

Would you buy me a cup of coffee? I am sharing my knowledge and time with you, help this project grow. Thank you!