NovaMonoFix
Errores PHP
X
Usuario
Password
0 FPS

Utilizar archivos XML con PHP

10 de Octubre del 2011 por Josep Antoni Bover, 0 visitas, 0 comentarios, 0 votos
Categorías : PHP, HTML, XML, Programación.
La web está en segundo plano, animación en pausa.
Cargando animación...
Utilizar archivos XML con PHP

XML son las siglas de eXtensible Markup Language, y en esencia es un lenguaje que permite a los desarrolladores crear sus propias etiquetas para definir un conjunto de información.

Pero que podemos hacer con XML? Por si solo no es más que un archivo de datos, que con PHP puede ser interpretado muy fácilmente.

Por poner un ejemplo, vamos a imaginarnos que queremos hacer una lista de datos, y que queremos mostrar esa lista de datos en varios documentos PHP. Esto podríamos hacerlo con un archivo de texto a base de fopen / fread, con una conexión mysql extrayendo dichos datos de una base de datos, o utilizando un archivo XML.

Si lo hacemos con un archivo de texto plano, nos tendríamos que crear nuestras propias reglas dentro del archivo para distinguir la información, cosa que aumentaría considerablemente el trabajo de programación.

Si utilizamos una base de datos, la información ya la tendríamos ordenada, pero cada vez que quisiéramos modificar esa lista de datos tendríamos que acceder a myphpadmin, o hacernos una página PHP para introducir datos, lo cual también acarrea trabajo extra.

En cambio si utilizamos XML solo tenemos que editar dicho archivo y añadir / eliminar las etiquetas pertinentes para modificar la lista de información a nuestro antojo.

PHP dispone de varias funciones para facilitar la interacción con archivos XML, en especial hoy vamos a tratar con estas tres : xml_parser_create, xml_parse_into_struct, xml_parser_free.

La función xml_parser_create crea un intérprete XML y devuelve su identificador para poder utilizarlo en otras funciones XML.

La función xml_parse_into_struct crea un array de datos con todo el contenido XML especificado dividido por etiquetas.

La función xml_parser_free libera un intérprete XML generado anteriormente con xml_parser_create.

Veamos un ejemplo en PHP para abrir y parsear un archivo XML :

Función PHP LeerContenidoXML
1
2
3
4
5
6
7
8
9
function LeerContenidoXML($Archivo) {
$ArchivoLista = fopen($Archivo, "r", true);
$DatosArchivo = fread($ArchivoLista, filesize($Archivo));
fclose($ArchivoLista);
$Parser = xml_parser_create();
xml_parse_into_struct($Parser, $DatosArchivo, $Valores, $Indices);
xml_parser_free($Parser);
return $Valores;
}

Por ejemplo en www.devildrey33.es el archivo index.php se genera automáticamente a partir de un archivo XML. En este archivo se indican todas las entradas, y a que categorías pertenece cada entrada. Veamos como quedaría el XML con las 5 últimas entradas de esta web :

Archivo : PHPyXML_Ejemplo.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<Contenidos>
<Entrada Nombre="Utilizar archivos XML con PHP" Dia="10" Mes="Octubre" Any="2011" URL="PHPyXML.php" />
<Entrada Nombre="Crear servidor web de pruebas portatil" Dia="07" Mes="Octubre" Any="2011" URL="XamppUSB.php" />
<Entrada Nombre="Creación de feeds RSS" Dia="06" Mes="Octubre" Any="2011" URL="FeedsRSS.php" />
<Entrada Nombre="C++ 4 Creación de archivos DUMP" Dia="05" Mes="Octubre" Any="2011" URL="Tutorial_WINAPI_4.php" />
<Entrada Nombre="ComboBox para la web" Dia="04" Mes="Octubre" Any="2011" URL="ComboBoxWeb.php" />
<Categoria Nombre='Cpp'>
<EntradaCategoria Nombre="C++ 4 Creación de archivos DUMP" />
</Categoria>
<Categoria Nombre='PHP'>
<EntradaCategoria Nombre="Utilizar archivos XML con PHP" />
<EntradaCategoria Nombre="ComboBox para la web" />
</Categoria>
<Categoria Nombre='Windows'>
<EntradaCategoria Nombre="Crear servidor web de pruebas portatil" />
<EntradaCategoria Nombre="Tutorial C++ 4 Creación de archivos DUMP" />
</Categoria>
<Categoria Nombre='Web'>
<EntradaCategoria Nombre="Utilizar archivos XML con PHP" />
<EntradaCategoria Nombre="Crear servidor web de pruebas portatil" />
<EntradaCategoria Nombre="Creación de feeds RSS" />
<EntradaCategoria Nombre="ComboBox para la web" />
</Categoria>
</Contenidos>

Ahora que ya conocemos la estructura del archivo XML y sabemos como parsear un archivo XML dentro de un array, veamos cómo podemos extraer los datos de dicho array :

Función PHP MostrarDatosXML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function MostrarDatosXML() {
$DatosXML = LeerContenidoXML("PHPyXML_Ejemplo.xml");
foreach ($DatosXML as $Etiqueta) {
// Se ha encontrado una Entrada
if ($Etiqueta['tag'] == "ENTRADA" && $Etiqueta['type'] == "complete") {
$Nombre = $Etiqueta['attributes']['NOMBRE'];
$Dia = $Etiqueta['attributes']['DIA'];
$Mes = $Etiqueta['attributes']['MES'];
$Any = $Etiqueta['attributes']['ANY'];
$Url = $Etiqueta['attributes']['URL'];
echo "<a href='$Url'>$Nombre</a> creado el $Dia de $Mes del $Any<br />";
}
// Se ha encontrado el inicio de una Categoria
if ($Etiqueta['tag'] == "CATEGORIA" && $Etiqueta['type'] == "open")
echo "<ul>".$Etiqueta['attributes']['NOMBRE'];
// Se ha encontrado el final de una Categoria
if ($Etiqueta['tag'] == "CATEGORIA" && $Etiqueta['type'] == "close")
echo "</ul>";
// Se ha encontrado una Entrada de una Categoria
if ($Etiqueta['tag'] == "ENTRADACATEGORIA" && $Etiqueta['type'] == "complete")
echo "<li>".$Etiqueta['attributes']['NOMBRE']."</li>";
}
}

Hay que destacar que se pueden especificar datos de dos formas dentro de una etiqueta. La primera es en forma de atributos, como serian : Nombre, Dia, Mes, Any, y Url. La otra forma seria añadir datos dentro de la etiqueta, por ejemplo "<Entrada>Mi entrada</Entrada>", y para acceder al texto "Mi entrada" deberíamos acceder al atributo 'value' al encontrar una etiqueta ENTRADA con el 'type' open.

Los nombres de las etiquetas y sus atributos durante el parsing se convierten a mayúsculas, por lo que no intentéis buscarlos utilizando minúsculas.

En cuanto a la función del ejemplo anterior, en esencia recorremos cada etiqueta que existe en el array DatosXML, la identificamos y la imprimimos en el documento final con un 'echo'.

Hay que destacar que existen 3 tipos de etiquetas : 'complete', 'open' y 'close'.

Es muy simple una etiqueta 'complete' es la que termina con una '/' al final, por ejemplo "<EntradaCategoria Nombre='Nombre' />".

Una etiqueta 'open' es una etiqueta que no tiene ninguna '/' y sirve para indicar el inicio de ese campo. Y una etiqueta 'close' es la que empieza con una '/', y indica que se ha terminado el contenido de dicha etiqueta.

Y esto es todo por hoy, podeis descargar el ejemplo de este tutorial, y ver como quedaria la pagina web una vez hecho el parsing al archivo XML.

Ver Ejemplo Descargar Ejemplo