&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 document XML y leerlo con simplexml_load_file. ejemplo.php, fichero a incluir con el string XML PHP: Tras el Parser Srta. Programadora Onlivia Actora Sr. Programador El Actor Así que, este lenguaje. Es como, un lenguaje de programación. ¿O es un lenguaje interpretado? 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. Obteniendo <literal><argumento></literal> pelicula[0]->argumento; ?> ]]> &example.outputs; El acceso a elementos dentro de un documento XML que contienen caracteres no permitidos por la convención de nombres de PHP (por ejemplo, el guión) puede realizarse encapsulando el nombre del elemento dentro de un par de llaves y comillas simples. Obteniendo <literal><linea></literal> pelicula->{'grandes-lines'}->linea; ?> ]]> &example.outputs; Accediendo 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. , mostramos cada . */ foreach ($peliculas->pelicula->personajes->personaje as $personaje) { echo $personaje->nombre, ' interpretado por ', $personaje->actor, PHP_EOL; } ?> ]]> &example.outputs; Las propiedades ($xml->pelicula en el ejemplo anterior) no son arrays. Son objetos iterables y accesibles. Usando 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 de la misma forma que si fuesen elementos de un array. de la primera película. * Mostramos la escala (tipo) también. */ foreach ($peliculas->pelicula[0]->puntuacion as $puntuacion) { switch((string) $puntuacion['tipo']) { // Toma los atributos como índices del elemento case 'pulgares': echo $puntuacion, ' votos positivos'; break; case 'estrellas': echo $puntuacion, ' estrellas'; break; } } ?> ]]> &example.outputs; Comprando 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 un cast a string usando (string). Si no se realiza de esta forma, PHP trata al elementos como un objeto. pelicula->titulo == 'PHP: Tras el Parser') { print 'Mi película favorita.'; } echo htmlentities((string) $peliculas->pelicula->titulo); ?> ]]> &example.outputs; Comparando dos elementos Dos SimpleXMLElements son considerados distintos aún cuando ambos apuntan al mismo elemento desde PHP 5.2.0. ]]> &example.outputs; Usando XPath SimpleXML incorpora soprote XPath. Para encontrar todos los elementos <personaje>: To find all <character> elements: xpath('//personaje') as $personaje) { echo $personaje->nombre . ' interpretado por ' . $personaje->actor, PHP_EOL; } ?> ]]> '//' actúa un comodín. Para especificar una ruta absoluta, hay que omitir una de las dos barras. &example.outputs; Estableciendo 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 = 'Señorita Programadora'; echo $peliculas->asXML(); ?> ]]> &example.outputs; PHP: Tras el Parser Srta. Programadora Onlivia Actora Sr. Programador El Actor Así que, este lenguaje. Es como, un lenguaje de programación. ¿O es un lenguaje interpretado? Lo descubrirás en esta intrigante y temible parodia de un documental. PHP soluciona todos los problemas web 7 5 +]]> Añadiendo 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'); $character->addChild('nombre', 'Sr. Parser'); $character->addChild('actor', 'John Doe'); $rating = $peliculas->pelicula[0]->addChild('puntuacion', 'Todos los públicos'); $rating->addAttribute('tipo', 'clasificación'); echo $peliculas->asXML(); ?> ]]> &example.outputs; PHP: Tras el Parser Srta. Programadora Onlivia Actora Sr. Programador El Actor Así que, este lenguaje. Es como, un lenguaje de programación. ¿O es un lenguaje interpretado? Lo descubrirás en esta intrigante y temible parodia de un documental. PHP soluciona todos los problemas web 7 5 ]]> Interoperatibilidad DOM PHP tiene un mecanismo para convertor nodos XML entre los formatos SimpleXML y DOM. Este ejemplo muestra como cambiar un elemento DOM a SimpleXML. loadXML('blah'); if (!$dom) { echo 'Error al analizar el documento'); exit; } $s = simplexml_import_dom($dom); echo $s->libro[0]->titulo; ?> ]]> &example.outputs;
Lidiar con los errores XML Lidiar con los errores XML cuando se cargan documentos es una tarea muy sencilla. Usando la funcionalidad libxml es posible suprimir todos los errores XML cuando se carga un documento y entonces, iterar sobre ellos. El objeto libXMLError, retornado por libxml_get_errors, contiene varias propiedades incluyendo el mensaje, línea y columna (posición) del error. Cargando un string XML erróneo "); if (!$sxe) { 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