Procesar documentos XML con SimpleXML en PHP
La extensión SimpleXML de PHP permite convertir un documento XML en un objeto que puede ser procesado con selectores de propiedades e iteradores de matrices.
SimpleXML: Acceder a elementos únicos
Veamos cómo acceder a elementos únicos de un documento XML similar a:
<?xml version="1.0" encoding="UTF-8"?> <feed> ... <name>10 Years</name> ... </feed> |
Por ejemplo, para obtener name el código será:
<?php $feed = "http://www.domain.com/feed/info.xml"; // volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); echo $xml->name; ?> |
SimpleXML: Acceder a elementos no únicos
Veamos cómo acceder a elementos no únicos de un documento XML similar a:
<?xml version="1.0" encoding="UTF-8"?> <feed> ... <tag> <name>rock</name> </tag> <tag> <name>metal</name> </tag> <tag> <name>post-grunge</name> </tag> ... </feed> |
Por ejemplo, para obtener todos los tag->name el código será:
<?php $feed = "http://www.domain.com/feed/info.xml"; // volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); foreach ($xml->tag as $tag) { echo $tag->name; } ?> |
SimpleXML: Acceder a atributos
Veamos cómo acceder a los atributos de un documento XML similar a:
<?xml version="1.0" encoding="UTF-8"?> <feed> ... <link rel="alternate" href="http://www.domain.com"/> <image size="small">http://www.domain.com/images/44.jpg</image> <image size="large">http://www.domain.com/images/55.jpg</image> ... </feed> |
Por ejemplo, para obtener el atributo href de link el código será:
<?php $feed = "http://www.domain.com/feed/info.xml"; // volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); echo $xml->link->attributes()->href; ?> |
Para obtener los campos image utilizando el atributo size para filtrar, el código será:
<?php $feed = "http://www.domain.com/feed/info.xml"; // volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); foreach ($xml->image as $image) { switch((string) $image['size']) { case 'small': echo $image; break; case 'large': echo $image; break; } } ?> |
SimpleXML: Trabajar con namespaces
Veamos cómo trabajar con namespaces.
Dado que en XML los nombres de las etiquetas (elementos) son definidos por el desarrollador, se suelen utilizar prefijos para evitar conflictos entre documentos XML procedentes de distintas fuentes. Cuando se utilizan prefijos se debe especificar el XML namespace (espacio de nombres XML) mediante la etiqueta xmlns. Veamos cómo acceder a los elementos namespace de un documento XML similar a:
<?xml version="1.0" encoding="UTF-8"?> <feed xmlns:media="http://search.yahoo.com/mrss/"> ... <entry> <media:group> <media:title type="plain">10 Years - Wasteland</media:title> <media:player url="http://www.domain.com/watch?v=ciuca"/> </media:group> </entry> ... </feed> |
Por ejemplo, para obtener media:title y media:player el código será:
<?php $feed = "http://www.domain.com/feed/info.xml"; // volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); $media = $xml->entry->children('http://search.yahoo.com/mrss/'); echo $media->group->title; echo $media->group->player->attributes()->url; ?> |
SimpleXML: Modificar valores
SimpleXML permite modificar los datos de un documento XML. Por ejemplo, para modificar name y convertir este documento XML…
<?xml version="1.0" encoding="UTF-8"?> <feed> ... <name>10 Years</name> ... </feed> |
… en este otro…
<?xml version="1.0" encoding="UTF-8"?> <feed> ... <name>Miss Coder</name> ... </feed> |
… el código será:
<?php $feed = "http://www.domain.com/feed/info.xml"; // volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); $xml->name = "Miss Coder"; ?> |
SimpleXML: Añadir elementos y atributos
SimpleXML permite añadir elementos y atributos en un documento XML. Por ejemplo, para convertir este documento XML…
<?xml version="1.0" encoding="UTF-8"?> <feed> ... <movie> <characters> <character> <name>Megan</name> <actor>Anna Smith</actor> </character> </characters> </movie> ... </feed> |
… en este otro…
<?xml version="1.0" encoding="UTF-8"?> <feed> ... <movie> <characters> <character> <name>Megan</name> <actor>Anna Smith</actor> </character> <character> <name>Mr. Parser</name> <actor>John Doe</actor> </character> </characters> <rating type="mpaa">PG</rating> </movie> ... </feed> |
… el código será:
<?php $feed = "http://www.domain.com/feed/info.xml"; // volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); // añadir character $character = $xml->movie[0]->characters->addChild('character'); $character->addChild('name', 'Mr. Parser'); $character->addChild('actor', 'John Doe'); // añadir rating $rating = $xml->movie[0]->addChild('rating', 'PG'); $rating->addAttribute('type', 'mpaa'); ?> |
Recursos
- Ayuda de PHP: XML Manipulation
Hola mira una pregunta, es que necesito acer un formulario desde PHP que me Guarde , Modifique y Elimine en un XML y la vverdad no tengo idea me podrias ayudar y responder a mi E-mail
Muchas gracias
hey que tal!, muchas gracias por la clase, oye tengo un problema, al yo hacer esto dentro de mi documento, no me guarda nada de nada, no se si me podrias ayudar
gracias
hola david. me gustaria que me ayudaras si es que encontraste una solución.