Ir al contenido principal

AJAX y XML: Extraer o recuperar datos de un archivo XML con AJAX

Para el siguiente tutorial se necesitan conocimientos en AJAX, JavaScript, XML y XML DOM.

Se tiene la siguiente información en un archivo XML:

Archivo libros.xml



Obtendremos a través de AJAX esa información y la mostraremos en el navegador en una tabla HTML.

En nuestro archivo index.php creamos un div y un botón para que cuando sea presionado muestre dentro del div la información que contiene el archivo XML. En el head importamos el archivo ajax.js que contiene la funcion JavaScript loadXMLDoc().

Archivo index.php


<!DOCTYPE html>
<html>

<head>
<script src="ajax.js"></script>
</head>

<body>

<h1>Asynchronous JavaScript and XML (AJAX)</h1>

<p>Obtener informaci&oacute;n de un archivo XML a trav&eacute;s de AJAX.</p>

<div id="info">
<button type="button" onclick="loadXMLDoc()">Obtener datos</button>
</div>

</body>
</html>


El archivo ajax.js es el archivo principal, el método open() carga el archivo que vamos a procesar (libros.xml), pero es con el método getElementsByTagName(name) que obtenemos todos los elementos (datos) de una etiqueta específica. Por ejemplo en la línea:

x=xmlDoc.getElementsByTagName("libro");

Lo que hace es obtener todos los elementos de la etiqueta libro y almacenarlos en la variable x como una lista de nodos. Una lista de nodos es un array de nodos, que se pueden recorrer a través de posiciones (como un arreglo) comenzando desde cero.

Con un ciclo for recorremos el array x:


for (i=0;i<x.length;i++)
{
txt=txt+"<tr><td>";
txt=txt + x[i].getElementsByTagName("titulo")[0].childNodes[0].nodeValue;
txt=txt+"</td>";

txt=txt+"<td>";
txt=txt + x[i].getElementsByTagName("autor")[0].childNodes[0].nodeValue;
txt=txt+"</td>";

txt=txt+"<td>";
txt=txt + x[i].getElementsByTagName("pais")[0].childNodes[0].nodeValue;
txt=txt+"</td></tr>";
}


Con la propiedad length calculamos automaticamente el tamaño del array. En este caso 5 libros.

La funcion o tarea de la línea:

x[i].getElementsByTagName("titulo")[0].childNodes[0].nodeValue;

Es que para cada libro obtenga el texto que contiene el elemento <title>.

getElementsByTagName("title")[0] - El primer elemento <title>
childNodes[0] - El primer hijo del elemento <title> (el texto del nodo)
nodeValue - El valor del nodo (el propio texto)

Lo anterior tambien aplica para obtener el autor y pais de cada libro. La variable txt es para mostrar la información en una tabla HTML.

Archivo ajax.js


function loadXMLDoc()
{
var xmlhttp;
var txt,x,i;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("libro");

txt="<table border='1'><tr><th>Titulo</th><th>Autor</th><th>Pais</th></tr>";

for (i=0;i<x.length;i++)
{
txt=txt+"<tr><td>";
txt=txt + x[i].getElementsByTagName("titulo")[0].childNodes[0].nodeValue;
txt=txt+"</td>";

txt=txt+"<td>";
txt=txt + x[i].getElementsByTagName("autor")[0].childNodes[0].nodeValue;
txt=txt+"</td>";

txt=txt+"<td>";
txt=txt + x[i].getElementsByTagName("pais")[0].childNodes[0].nodeValue;
txt=txt+"</td></tr>";
}

txt=txt+"</table>";

document.getElementById("info").innerHTML=txt;
}
}
xmlhttp.open("GET","libros.xml",true);
xmlhttp.send();
}


Demo/Código fuente

Comentarios

Entradas más populares de este blog

Buscador en tiempo real con AJAX, PHP y MySQL

Buscador realizado en HTML utilizando como lenguaje de programación PHP , la tecnología AJAX y a MySQL como motor de base de datos.

Funciones (subprocesos) en PSeInt

A partir de la version 20121010 (10/Octubre/2012) PSeInt permite la posibilidad de definir funciones al que el creador del mismo bautizó como subprocesos , en este tutorial explicaremos brevemente cómo se tratan dichas funciones. Para empezar una función no es más que un bloque de código con un determinado fin o propósito, podemos definir más de una y nos permiten ahorrar líneas código si nuestros programas son muy extensos o hay codificación redundante.

Convertir un decimal a binario en PSeInt

Utilizaremos el siguiente método para convertir números decimales a binarios (números que se sólo se componen de unos y ceros). El método es sencillo, consiste en dividir el número decimal entre dos, despues su cociente entre el mismo número y así sucesivamente hasta que finalmente el cociente (que se convierte en un divisor) sea igual a uno. Despúes organizamos los residuos desde el último al primero para obtener el número binario que buscamos.