Jun 12

Escrito por: Pablo Veintimilla

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

6 Respuestas to “Leer y escribir XML con PHP 5.x”

  1. Martin Sagastume Dice:

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

    gracias !

  2. percysolis Dice:

    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

  3. Pablo Veintimilla Dice:

    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!

  4. Zam Dice:

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

  5. goyo Dice:

    excelente trabajo, felicidades por compartirlo.

  6. Cristian Dice:

    Lo que andaba buscando GRACIAS!!

Escribe tú comentario

Switch to our mobile site