Cómo recorrer un archivo XML usando PHP

Inicio / Cómo hacer para... / Cómo recorrer un archivo XML usando PHP

Como de costumbre, comencemos por ponernos de acuerdo en las definiciones.

Qué es XML

Las siglas XML remiten a eXtensible Markup Language (Lenguaje de etiquetas extendible).

Se trata de texto estructurado mediante etiquetas (Palabras encerradas entre < y >):

<utensilios>
  <tenedor/>
  <cuchillo/>
</utensilios>

Para qué sirve XML

XML se inventó como un medio de intercambio de información entre sistemas a través de Internet. Al ser un formato basado en texto, era fácil aprovechar la infraestructura existente para comunicarse a través de HTTP.

Hoy en día, XML es utilizado en muchas implementaciones de WebServices (Por ejemplo, las facturas electrónicas) y también para almacenar configuraciones (En el caso del lenguaje Java es muy común encontrar este tipo de archivos, en PHP no tanto).

Cómo se procesa XML usando PHP

Al tratarse de texto, un modo de procesar XML es, como cualquier otro texto… pueden usarse expresiones regulares u otro medio de análisis de texto para interpretar y/o generar las etiquetas.

Claro que no es muy divertido que digamos…

 


Para comprender completamente lo que viene a continuación se requieren conocimientos de Programación Orientada a Objetos con PHP. Si aún no lo tenés muy claro este curso te puede ayudar.


Otro modo bastante más práctico es usar la biblioteca SimpleXML que viene con PHP.

La clase principal de la biblioteca es SimpleXMLElement. Con esta clase se puede crear una estructura en memoria a partir de un texto XML y luego recorrerlo en forma sencilla.

Ejemplo de lectura de XML con SimpleXML

El constructor de SimpleXMLElement recibe un texto XML:

<?php
$xml = new SimpleXMLElement( '<utensilios><tenedor/><cuchillo/></utensilios>' );

Y a partir de ahí pueden realizarse diversas operaciones para recorrer los elementos.

Una de ellas es buscar elementos explícitamente a través de su XPATH:

$elementos = $xml->xpath('/utensilios/tenedor');

Esta llamada dejará en el array $elementos todos los nodos tenedor que se encuentren bajo la clave utensilios (En este caso es sólo uno, pero eso SimpleXMLElement no lo sabe a priori).

Si agregamos un print_r( $elementos ) veremos :

Array
(
    [0] => SimpleXMLElement Object
        (
        )

)

Es decir, un array con un único elemento… de tipo SimpleXMLElement, al que podemos nuevamente aplicarle todas las funciones que provee la clase.

Ejemplo de recorrida de XML con SimpleXML

Otra forma de recorrer el texto XML es a través del método children:

<?php
$xml = new SimpleXMLElement( '<utensilios><tenedor/><cuchillo/></utensilios>' );
foreach ( $xml->children() as $child ) {
        print_r( $child );
}

Esta es la que deberías usar si no conoces exactamente la estructura del XML o si efectivamente tenés que recorrer el archivo completo.

Cómo leer un archivo XML usando PHP

Bueno, con lo que viste hasta ahora el paso que queda es realmente corto… se podría leer el contenido del archivo a una variable y pasarla al constructor de SimpleXMLElement:

<?php
$texto = file( 'archivo.xml' );
$xml = new SimpleXMLElement( $texto );
$elementos = $xml->xpath('/utensilios/tenedor');
print_r( $elementos );

O bien pasar directamente la ruta al archivo al constructor:

<?php
$xml = new SimpleXMLElement( 'archivo.xml' );
$elementos = $xml->xpath('/utensilios/tenedor');
print_r( $elementos );

Y dejar que SimpleXML se encargue de interpretar si se trata de uno u otro.

Conclusión

Si todavía no te convencí de usar SimpleXML en lugar de hacer las cosas a mano, te invito a leer un poco más sobre el formato XML (Especialmente el manejo de namespaces).

Ahora, si tenés que interactuar con un sistema que está implementado usando XML, bueno… no hay muchas opciones.

Si, por el contrario, estás pensando en usar algún formato de texto para guardar configuración o incluso para intercambiar con otros sistemas, te sugiero darle una mirada a JSON o a YAML

 

mchojrin

Director Académico y Docente at Leeway Academy
Hola! Soy Mauro Chojrin, estudié la Lic. en Ciencias de la Computación en la Universidad de Buenos Aires.

Me desempeño como docente de programación desde el año 1997.

Pasé por diferentes instituciones (Escuela Técnica ORT, Digital House, EducacionIT, ITMaster, Escuela DaVinci entre otros).

Actualmente coordino los cursos dictados en Leeway Academy y desarrollo sistemas usando PHP y framework Symfony

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.