Leer y escribir XML con PHP 5.x

Junio 12, 2008

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馻do 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

 

Entrada almacenada bajo: Libre, PHP

Este post ha sido visto 708 veces

1 Comentario Añade tu comentario

  • 1. Martin Sagastume  |  Agosto 12, 2008 at 12:00 pm

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

    gracias !

Envia comentario

Obligatorio

Obligatorio

Algunas etiquetas HTML estan permitidas:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Conectate a este comentario  |  Suscribete a los comentarios via RSS Feed



Mira tambien

Feeds

 Suscribirse por feed

Suscribirse por mail