Forum und email

Funciones SimpleXML

Introducción

La extensión SimpleXML ofrece un conjunto de herramientas simples y fáciles de usar para convertir un XML en un objeto que puede ser procesado con selectores de propiedades e iteradores de matrices.

Requisitos

La extensión SimpleXML requiere PHP 5.

Instalación

La extensión SimpleXML está habilitada por defecto. Para deshabilitarla, usa la opción de configuración --disable-simplexml.

Ejemplos

Varios ejemplos de la referencia requieren una cadena XML. En vez de repetir esta cadena cada vez, la ponemos en un fichero php que incluiremos en cada ejemplo. éste fichero lo mostramos en la siguiente sección de ejemplo. Alternativamente, puedes crear un documento XML y cargarlo mediante la función simplexml_load_file().

Example#1 Fichero de Inclusión ejemplo.php con una cadena XML

<?php
$xmlstr 
= <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Ms. Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&#211;r</actor>
   </character>
  </characters>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
</movies>
XML;
?>

La simplicidad de SimpleXML aparece más claramente cuando se extrae una cadena o un número de un documento XML básico.

Example#2 Obteniendo <plot>

<?php
include 'ejemplo.php';

$xml simplexml_load_string($xmlstr);

echo 
$xml->movie[0]->plot// "So this language. It's like..."
?>

Example#3 Accediendo a elementos no únicos en SimpleXML

Cuando existen multiples instancias de un elemento de un mismo elemento padre, se aplican las técnicas normales de iteración.

<?php
include 'ejemplo.php';

$xml simplexml_load_string($xmlstr);

/* Para cada nodo <movie>, mostramos un <plot>. */
foreach ($xml->movie as $movie) {
   echo 
$movie->plot'<br />';
}

?>

Example#4 Usando atributos

Por ahora, solo hemos cubierto la parte de leer los nombres de los elementos y sus valores. SimpleXML también puede acceder a los atributos de los elementos. Acceder a los atributos de un elemento es como acceder a los elementos de una array.

<?php
include 'ejemplo.php';

$xml simplexml_load_string($xmlstr);

/* Accede a los nodos <rating> de la primera pel&iacute;cula.
 * Output the rating scale, too. */
foreach ($xml->movie[0]->rating as $rating) {
    switch((string) 
$rating['type']) { // Obtenemos los atributos como elementos &iacute;ndice
    
case 'thumbs':
        echo 
$rating' thumbs up';
        break;
    case 
'stars':
        echo 
$rating' stars';
        break;
    }
}
?>

Example#5 Comparando Elementos y Atributos con Texto

Para comparar un elemento o atributo con una cadena o pasarlo a una función que requiera una cadena, debes convertirlo a cadena mediante (string). De otra forma, PHP tratará el elemento como un objeto.

<?php     
include 'ejemplo.php';

$xml simplexml_load_string($xmlstr);

if ((string) 
$xml->movie->title == 'PHP: Behind the Parser') {
    print 
'Mi pel&iacute;cula favorita.';
}

htmlentities((string) $xml->movie->title);
?>

Example#6 Usando Xpath

SimpleXML incluye soporte nativo de Xpath. Para encontrar todos los elementos <character>:

<?php
include 'ejemplo.php';
$xml simplexml_load_string($xmlstr);

foreach (
$xml->xpath('//character') as $character) {
    echo 
$character->name'played by '$character->actor'<br />';
}
?>

'//' sirve como comodín. Para especificar paths absolutos, hay que omitir una de las barras invertidas.

Example#7 Definiendo valores

Los datos en SimpleXML no tienen porqué ser constantes. El objeto permite la manipulación de todos sus elementos.

<?php
include 'ejemplo.php';
$xml simplexml_load_string($xmlstr);

$xml->movie[0]->characters->character[0]->name 'Miss Coder';

echo 
$xml->asXML();
?>

El código de arriba mostrará un documento XML nuevo, como el original, excepto que el nuevo XML tendrá Miss Coder en vez de Ms. Coder.

Example#8 Interoperabilidad con DOM

PHP tiene un mecanismo para convertir nodos XML entre los formatos de SimpleXML y DOM. Este ejemplo muestra como se podría cambiar un elemento DOM a otro SimpleXML.

<?php
$dom 
= new domDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!
$dom) {
     echo 
'Error al parsear el documento';
     exit;
}

$s simplexml_import_dom($dom);

echo 
$s->book[0]->title;
?>

Table of Contents