&reftitle.examples;
Uso básico de SimpleXML Muchos ejemplos en esta referencia requieren un string XML. En vez de repetir este string en cada ejemplo, se ha puesto en un fichero que se incluye en cada ejemplo. Este fichero se muestra en la siguiente sección de ejemplo. Alternativamente, puede crearse un documento XML y leerlo con simplexml_load_file. El fichero ejemplo.php a incluir con el string XML PHP: Tras el Analilzador Srta. Programadora Onlivia Actora Sr. Programador El ActÓr Así que, este lenguaje. Es como, un lenguaje de programación. ¿O es un lenguaje de script? Lo descubrirás en esta intrigante y temible parodia de un documental. PHP soluciona todos los problemas web 7 5 XML; ?> ]]> La simplicidad de SimpleXML se ve claramente cuando se extrae un string o un número de un documento XMl básico. Obtener <literal><argumento></literal> pelicula[0]->argumento; ?> ]]> &example.outputs; El acceso a elementos dentro de un documento XML que contiene caracteres no permitidos por la convención de nombres de PHP (p.ej., el guión) puede realizarse encapsulando el nombre del elemento dentro de un par de llaves y comillas simples. Obtener <literal><frase></literal> pelicula->{'grandes-frases'}->frase; ?> ]]> &example.outputs; Acceder a elementos no únicos en SimpleXML Cuando existen múltiples instancias de un elemento como hijos de un único elemento padre, se aplican las técnicas normales de iteración. , se muestra cada . */ foreach ($peliculas->pelicula->personajes->personaje as $personaje) { echo $personaje->nombre, ' interpretado por ', $personaje->actor, PHP_EOL; } ?> ]]> &example.outputs; Las propiedades ($peliculas->pelicula en el ejemplo anterior) no son arrays. Son objetos iterables y accesibles. Utilizar atributos Hasta aquí, únicamente se ha cubierto el trabajo de leer nombres de elementos y sus valores. SimpleXML puede también acceder a los atributos de los elementos. Para acceder a ellos, se realiza como si fuesen elementos de un array. de la primera película. * Mostrar la escala de puntuación también. */ foreach ($peliculas->pelicula[0]->puntuacion as $puntuacion) { switch((string) $puntuacion['tipo']) { // Obtener los atributos como índices del elemento case 'votos': echo $puntuacion, ' votos positivos'; break; case 'estrellas': echo $puntuacion, ' estrellas'; break; } } ?> ]]> &example.outputs; Comparar elementos y atributos con texto Para comparar un elemento o atributo con un string o pasarlo a una función que requiera un string, debe realizarse una conversión a string empleando (string). De lo contrario, PHP trata al elemento como un objeto. pelicula->titulo == 'PHP: Tras el Analilzador') { print 'Mi película favorita.'; } echo htmlentities((string) $peliculas->pelicula->titulo); ?> ]]> &example.outputs; Comparar dos elementos Dos SimpleXMLElements son considerados distintos incluso cuando ambos apuntan al mismo elemento desde PHP 5.2.0. ]]> &example.outputs; Utilizar XPath SimpleXML incorpora soporte para XPath. Para encontrar todos los elementos <personaje>: xpath('//personaje') as $personaje) { echo $personaje->nombre . ' interpretado por ' . $personaje->actor, PHP_EOL; } ?> ]]> '//' actúa como un comodín. Para especificar una ruta absoluta, hay que omitir una de las dos barras. &example.outputs; Establecer valores Los datos en SimpleXML no tienen que ser constantes. El objeto permite que se manipulen todos sus elementos. pelicula[0]->personajes->personaje[0]->nombre = 'Srta. Programadora'; echo $peliculas->asXML(); ?> ]]> &example.outputs; PHP: Tras el Analilzador Srta. Programadora Onlivia Actora Sr. Programador El ActÓr Así que, este lenguaje. Es como, un lenguaje de programación. ¿O es un lenguaje de script? Lo descubrirás en esta intrigante y temible parodia de un documental. PHP soluciona todos los problemas web 7 5 +]]> Añadir elementos y atributos Desde PHP 5.1.3, SimpleXML tiene la capacidad de añadir fácilmente hijos y atributos. pelicula[0]->personajes->addChild('personaje'); $personaje->addChild('nombre', 'Sr. Analizador'); $personaje->addChild('actor', 'John Doe'); $puntuacion = $peliculas->pelicula[0]->addChild('puntuacion', 'Todos los públicos'); $puntuacion->addAttribute('tipo', 'clasificación'); echo $peliculas->asXML(); ?> ]]> &example.outputs; PHP: Tras el Analizador Srta. Programadora Onlivia Actora Sr. Programador El Actor Sr. AnalizadorJohn Doe Así que, este lenguaje. Es como, un lenguaje de programación. ¿O es un lenguaje de script? Lo descubrirás en esta intrigante y temible parodia de un documental. PHP soluciona todos los problemas web 7 5 ]]> Interoperatibilidad con DOM PHP tiene un mecanismo para convertir nodos XML entre los formatos SimpleXML y DOM. Este ejemplo muestra cómo cambiar un elemento DOM a SimpleXML. loadXML('bla'); if (!$dom) { echo 'Error al analizar el documento'); exit; } $s = simplexml_import_dom($dom); echo $s->libro[0]->titulo; ?> ]]> &example.outputs;
Tratar con los errores XML Tratar con los errores XML cuando se cargan documentos es una tarea muy sencilla. Utilizando la funcionalidad de libxml es posible suprimir todos los errores XML cuando se carga un documento para luego recorrerlos. El objeto libXMLError, retornado por libxml_get_errors, contiene varias propiedades, incluyendo el mensaje, línea y columna (posición) del error. Cargar un string XML erróneo "); if ($sxe === false) { echo "Error cargando XML\n"; foreach(libxml_get_errors() as $error) { echo "\t", $error->message; } } ?> ]]> &example.outputs; ' expected Opening and ending tag mismatch: xml line 1 and broken Premature end of data in tag broken line 1 ]]>
&reftitle.seealso; libxml_use_internal_errors libxml_get_errors