&reftitle.examples;
Uso básico
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 XMLPHP: Tras el ParserSrta. ProgramadoraOnlivia ActoraSr. ProgramadorEl 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 web75
XML;
?>
]]>
La simplicidad de SimpleXML se ve claramente cuando se extrae un string o
un número de un documento XMl básico.
Obteniendo <argumento>
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 <linea>
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 ($xml->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 ($xml->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) $xml->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 $xml->asXML();
?>
]]>
&example.outputs;
PHP: Tras el ParserSrta. ProgramadoraOnlivia ActoraSr. ProgramadorEl 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 web75
+]]>
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 = $xml->pelicula[0]->addChild('puntuacion', 'Todos los públicos');
$rating->addAttribute('tipo', 'clasificación');
echo $xml->asXML();
?>
]]>
&example.outputs;
PHP: Tras el ParserSrta. ProgramadoraOnlivia ActoraSr. ProgramadorEl 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 web75
]]>
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_errorslibxml_get_errors