Jun 12
Escrito por: Pablo Veintimilla
Leer archivos XML con PHP 5.x
Pensemos que queremos leer el siguiente XML:
<books><book><author>Jack Herrington</author><title>PHP Hacks</title><publisher>O'Reilly</publisher></book><book><author>Jack Herrington</author><title>Podcasting Hacks</title><publisher>O'Reilly</publisher></book></books>
En PHP usariamos el siguiente código para leer el XML:
<?php/*Instancio la clase DOMque nos permitira operar con el XML*/$doc = new DOMDocument();/*Cargo el XML,En este caso es un archivo llamado books.xml,podriamos usar loadXML si desamos leer de un string*/$doc->load( 'books.xml' );/*Obtengo el nodo book del XMLa traves del metodo getElementsByTagName,este nos entregara una lista de todos losnodos encontrados */$books = $doc->getElementsByTagName( "book" );/*Al ser $books una lista de nodoslo puedo recorrer y obtener todosu contenido*/foreach( $books as $book ){$authors = $book->getElementsByTagName( "author" );/*Obtengo el valor del primer elemento 'item(0)'de la lista $autors.Si existiera un atriburto en el nodo para obtenerlousaria $authors->getAttribute('atributo');*/$author = $authors->item(0)->nodeValue;$publishers = $book->getElementsByTagName( "publisher" );$publisher = $publishers->item(0)->nodeValue;$titles = $book->getElementsByTagName( "title" );$title = $titles->item(0)->nodeValue;echo "$title - $author - $publisher\n";}?>
Ahora para escribir el mismo archivo podemos usar:
<?php/*Formo un arregloque contien los datos a escribir*/$books = array();$books [] = array('title' => 'PHP Hacks','author' => 'Jack Herrington','publisher' => "O'Reilly");$books [] = array('title' => 'Podcasting Hacks','author' => 'Jack Herrington','publisher' => "O'Reilly");$doc = new DOMDocument();/*Especifico que el resultado tengaformato que incluye tabulacionesy espacios*/$doc->formatOutput = true;/*Creo el nodo 'books'*/$r = $doc->createElement( "books" );/*Añado el nodo 'books'al documento*/$doc->appendChild( $r );foreach( $books as $book ){$b = $doc->createElement( "book" );$author = $doc->createElement( "author" );$author->appendChild($doc->createTextNode( $book['author'] ));$b->appendChild( $author );$title = $doc->createElement( "title" );$title->appendChild($doc->createTextNode( $book['title'] ));$b->appendChild( $title );$publisher = $doc->createElement( "publisher" );$publisher->appendChild($doc->createTextNode( $book['publisher'] ));$b->appendChild( $publisher );$r->appendChild( $b );}/*Guardo el documento y la imprimo,si deseo guardar en un archivo usuaria$doc->save('path/to/archive');*/echo $doc->saveXML();?>
Estos ejemplos muestran lo elemental de la extension DOM, existen muchos metodos y clases mas, que nos pueden ser útiles, podemos consultar su documentacion en PHP: DOM Manual
Otros post
Este post ha sido visto 6054 veces

Agosto 12th, 2008 at 12:00 pm
Excelente!!!!!!!!!!!!!! esto estaba buscandoooo
gracias !
Julio 16th, 2009 at 4:49 am
Sep, excelente trabajo!!!
Bueno no quisiera ser inoportuno, pero veo k eres bueno en esto y yo solo soy estudiante y estoy empezando con esto, quisiera saver como seria con AJAX, me refiero a k si digamos k el archivo XML sea generado con php y k los datos huviesen sido sacados de una base de datos, por ejemplo envio dos valores como por autor y por titulo pero no quisiera k la pagina se recargue creo k ahi se usa AJAX, pero en fin no se si podrias hacer un ejemplo con el mismo XML de ejemplo, muchos te lo agrdecerian en especial Yo.
Gracias anticipadamente
Julio 16th, 2009 at 8:19 am
Hola, gracias por tu comentario.
Si lo que me comentas se puede hacer con AJAX, puedes usar un Framework para hacer esto.
Yo uso Prototype, puedes ver un tutorial en http://www.prototypejs.org/learn/introduction-to-ajax
Slds!
Noviembre 11th, 2009 at 3:08 am
Excelente justo lo que necesitaba!! Gracias por compartir esta info.
Febrero 11th, 2010 at 10:30 am
excelente trabajo, felicidades por compartirlo.
Febrero 25th, 2010 at 10:29 am
Lo que andaba buscando GRACIAS!!