&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 XMLPHP: Tras el AnalilzadorSrta. ProgramadoraOnlivia ActoraSr. ProgramadorEl 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 web75
XML;
?>
]]>
La simplicidad de SimpleXML se ve claramente cuando se extrae un string o
un número de un documento XMl básico.
Obtener <argumento>
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 <frase>
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 AnalilzadorSrta. ProgramadoraOnlivia ActoraSr. ProgramadorEl 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 web75
+]]>
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 AnalizadorSrta. ProgramadoraOnlivia ActoraSr. ProgramadorEl ActorSr. 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 web75
]]>
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_errorslibxml_get_errors