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
Este post ha sido visto 9174 veces
Inspiración y Determinación |
En Blog UnderMedia se recopilan y publican periódicamente noticias, artÃculos o comentarios generados dentro de UnderMedia S.A.
8 nomentarios para Leer y escribir XML con PHP 5.x
Martin Sagastume
Agosto 12th, 2008 at 12:00
Excelente!!!!!!!!!!!!!! esto estaba buscandoooo
gracias !
percysolis
Julio 16th, 2009 at 04:49
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
Pablo Veintimilla
Julio 16th, 2009 at 08:19
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!
Zam
Noviembre 11th, 2009 at 03:08
Excelente justo lo que necesitaba!! Gracias por compartir esta info.
goyo
Febrero 11th, 2010 at 10:30
excelente trabajo, felicidades por compartirlo.
Cristian
Febrero 25th, 2010 at 10:29
Lo que andaba buscando GRACIAS!!
Alfredo
Marzo 17th, 2010 at 19:35
Hola que tal, kiero agradecerte la informacion de este articulo, me ha sido de gran utilidad, solo para cooperar un poquito kisiera hacer una aclaracion o especificar la informacion
Para acceder al atributo de un nodo en lugar de usar
$authors->getAttribute(‘atributo’);
(esta forma devuelve un error en la funcion getAttribute())
se usaria la sintaxis
$authors->item(o)->getAttribute(‘atributo’);
Pero la vdd es tu articulo me fue de mucha ayuda. Gracias !!!!
Juancho
Mayo 6th, 2010 at 10:19
Muy buen post, me sirvio mucho de ayuda..soy nuevo con php y esto me deja claro todo…thanks!!