Leer y escribir XML con PHP 5.x

En: Libre|PHP

12 Jun 2008

WP Greet Box icon
Hola! Si estás nuevo por aquí y te gusta lo que ves, puedes disfrutar de una actualización automática y gratuita por RSS para leer nuestros artículos completos cuando lo deseas en tu lector RSS favorito.

Leer archivos XML con PHP 5.x

Pensemos que queremos leer el siguiente XML:

  1. <books>
  2. <book>
  3. <author>Jack Herrington</author>
  4. <title>PHP Hacks</title>
  5. <publisher>O'Reilly</publisher>
  6. </book>
  7. <book>
  8. <author>Jack Herrington</author>
  9. <title>Podcasting Hacks</title>
  10. <publisher>O'Reilly</publisher>
  11. </book>
  12. </books>

En PHP usariamos el siguiente código para leer el XML:

  1. <?php
  2. /*Instancio la clase DOM
  3. que nos permitira operar con el XML*/
  4. $doc = new DOMDocument();
  5.  
  6. /*Cargo el XML,
  7. En este caso es un archivo llamado books.xml,
  8. podriamos usar loadXML si desamos leer de un string*/
  9. $doc->load( 'books.xml' );
  10.  
  11. /*Obtengo el nodo book del XML
  12. a traves del metodo getElementsByTagName,
  13. este nos entregara una lista de todos los
  14. nodos encontrados */
  15. $books = $doc->getElementsByTagName( "book" );
  16.  
  17. /*Al ser $books una lista de nodos
  18. lo puedo recorrer y obtener todo
  19. su contenido*/
  20. foreach( $books as $book )
  21. {
  22. $authors = $book->getElementsByTagName( "author" );
  23.  
  24. /*Obtengo el valor del primer elemento 'item(0)'
  25. de la lista $autors.
  26. Si existiera un atriburto en el nodo para obtenerlo
  27. usaria $authors->getAttribute('atributo');
  28. */
  29. $author = $authors->item(0)->nodeValue;
  30.  
  31. $publishers = $book->getElementsByTagName( "publisher" );
  32. $publisher = $publishers->item(0)->nodeValue;
  33.  
  34. $titles = $book->getElementsByTagName( "title" );
  35. $title = $titles->item(0)->nodeValue;
  36.  
  37. echo "$title - $author - $publisher\n";
  38. }
  39. ?>

Ahora para escribir el mismo archivo podemos usar:

  1. <?php
  2. /*
  3. Formo un arreglo
  4. que contien los datos a escribir
  5. */
  6. $books = array();
  7. $books [] = array(
  8. 'title' => 'PHP Hacks',
  9. 'author' => 'Jack Herrington',
  10. 'publisher' => "O'Reilly"
  11. );
  12. $books [] = array(
  13. 'title' => 'Podcasting Hacks',
  14. 'author' => 'Jack Herrington',
  15. 'publisher' => "O'Reilly"
  16. );
  17.  
  18. $doc = new DOMDocument();
  19.  
  20. /*Especifico que el resultado tenga
  21. formato que incluye tabulaciones
  22. y espacios
  23. */
  24. $doc->formatOutput = true;
  25.  
  26. /*
  27. Creo el nodo 'books'
  28. */
  29. $r = $doc->createElement( "books" );
  30.  
  31. /*
  32. Añado el nodo 'books'
  33. al documento
  34. */
  35. $doc->appendChild( $r );
  36.  
  37. foreach( $books as $book )
  38. {
  39. $b = $doc->createElement( "book" );
  40.  
  41. $author = $doc->createElement( "author" );
  42. $author->appendChild(
  43. $doc->createTextNode( $book['author'] )
  44. );
  45. $b->appendChild( $author );
  46.  
  47. $title = $doc->createElement( "title" );
  48. $title->appendChild(
  49. $doc->createTextNode( $book['title'] )
  50. );
  51. $b->appendChild( $title );
  52.  
  53. $publisher = $doc->createElement( "publisher" );
  54. $publisher->appendChild(
  55. $doc->createTextNode( $book['publisher'] )
  56. );
  57. $b->appendChild( $publisher );
  58.  
  59. $r->appendChild( $b );
  60. }
  61.  
  62. /*
  63. Guardo el documento y la imprimo,
  64. si deseo guardar en un archivo usuaria
  65. $doc->save('path/to/archive');
  66. */
  67. echo $doc->saveXML();
  68. ?>

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 9174 veces

8 nomentarios para Leer y escribir XML con PHP 5.x

Avatar

Martin Sagastume

Agosto 12th, 2008 at 12:00

Excelente!!!!!!!!!!!!!! esto estaba buscandoooo

gracias !

Avatar

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

Avatar

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!

Avatar

Zam

Noviembre 11th, 2009 at 03:08

Excelente justo lo que necesitaba!! Gracias por compartir esta info.

Avatar

goyo

Febrero 11th, 2010 at 10:30

excelente trabajo, felicidades por compartirlo.

Avatar

Cristian

Febrero 25th, 2010 at 10:29

Lo que andaba buscando GRACIAS!!

Avatar

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 !!!!

Avatar

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!!

Deja tu comentario!

Acerca de UnderMedia

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.

Twitter UnderMedia

Comunidad

Ultimas visitas

Raking

  • Blogalaxia
  • Top Blogs Ecuador

Switch to our mobile site