mirror of
https://github.com/php/doc-es.git
synced 2026-03-26 08:22:08 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@333976 c90b9560-bf6c-de11-be94-00142212c4b1
499 lines
13 KiB
XML
499 lines
13 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: b93b3a95c9b51e6c39782823dc2dac75ced81107 Maintainer: yago Status: ready -->
|
|
<!-- Reviewed: yes Maintainer: seros -->
|
|
|
|
<chapter xml:id="simplexml.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
&reftitle.examples;
|
|
<section xml:id="simplexml.examples-basic">
|
|
<title>Uso básico de SimpleXML</title>
|
|
<para>
|
|
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
|
|
<function>simplexml_load_file</function>.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>El fichero ejemplo.php a incluir con el string XML</title>
|
|
<programlisting role="php" xml:id="simplexml.examples.movie">
|
|
<![CDATA[
|
|
<?php
|
|
$xmlstr = <<<XML
|
|
<?xml version='1.0' standalone='yes'?>
|
|
<peliculas>
|
|
<pelicula>
|
|
<titulo>PHP: Tras el Analilzador</titulo>
|
|
<personajes>
|
|
<personaje>
|
|
<nombre>Srta. Programadora</nombre>
|
|
<actor>Onlivia Actora</actor>
|
|
</personaje>
|
|
<personaje>
|
|
<nombre>Sr. Programador</nombre>
|
|
<actor>El ActÓr</actor>
|
|
</personaje>
|
|
</personajes>
|
|
<argumento>
|
|
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.
|
|
</argumento>
|
|
<grandes-frases>
|
|
<frase>PHP soluciona todos los problemas web</frase>
|
|
</grandes-frases>
|
|
<puntuacion tipo="votos">7</puntuacion>
|
|
<puntuacion tipo="estrellas">5</puntuacion>
|
|
</pelicula>
|
|
</peliculas>
|
|
XML;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
La simplicidad de SimpleXML se ve claramente cuando se extrae un string o
|
|
un número de un documento XMl básico.
|
|
<example>
|
|
<title>Obtener <literal><argumento></literal></title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'ejemplo.php';
|
|
|
|
$peliculas = new SimpleXMLElement($xmlstr);
|
|
|
|
echo $peliculas->pelicula[0]->argumento;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
|
|
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.
|
|
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
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.
|
|
<example>
|
|
<title>Obtener <literal><frase></literal></title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'ejemplo.php';
|
|
|
|
$peliculas = new SimpleXMLElement($xmlstr);
|
|
|
|
echo $peliculas->pelicula->{'grandes-frases'}->frase;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
PHP soluciona todos los problemas web
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Acceder a elementos no únicos en SimpleXML</title>
|
|
<simpara>
|
|
Cuando existen múltiples instancias de un elemento como hijos de un único
|
|
elemento padre, se aplican las técnicas normales de iteración.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'ejemplo.php';
|
|
|
|
$peliculas = new SimpleXMLElement($xmlstr);
|
|
|
|
/* Para cada <personaje>, se muestra cada <nombre>. */
|
|
foreach ($peliculas->pelicula->personajes->personaje as $personaje) {
|
|
echo $personaje->nombre, ' interpretado por ', $personaje->actor, PHP_EOL;
|
|
}
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
Srta. Programadora interpretado por Onlivia Actora
|
|
Sr. Programador interpretado por El ActÓr
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Las propiedades (<literal>$peliculas->pelicula</literal> en el ejemplo anterior)
|
|
no son arrays. Son objetos <link linkend="class.iterator">iterables</link>
|
|
y <link linkend="class.arrayaccess">accesibles</link>.
|
|
</para>
|
|
</note>
|
|
<para>
|
|
<example>
|
|
<title>Utilizar atributos</title>
|
|
<simpara>
|
|
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
|
|
<type>array</type>.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'ejemplo.php';
|
|
|
|
$peliculas = new SimpleXMLElement($xmlstr);
|
|
|
|
/* Acceder a los nodos <puntuacion> 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;
|
|
}
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
7 votos positivos5 estrellas
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Comparar elementos y atributos con texto</title>
|
|
<simpara>
|
|
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
|
|
<literal>(string)</literal>. De lo contrario, PHP trata al elemento como un objeto.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'ejemplo.php';
|
|
|
|
$peliculas = new SimpleXMLElement($xmlstr);
|
|
|
|
if ((string) $peliculas->pelicula->titulo == 'PHP: Tras el Analilzador') {
|
|
print 'Mi película favorita.';
|
|
}
|
|
|
|
echo htmlentities((string) $peliculas->pelicula->titulo);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
Mi película favorita.PHP: Tras el Analilzador
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Comparar dos elementos</title>
|
|
<simpara>
|
|
Dos SimpleXMLElements son considerados distintos incluso cuando ambos apuntan
|
|
al mismo elemento desde PHP 5.2.0.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'ejemplo.php';
|
|
|
|
$pelicula1 = new SimpleXMLElement($xmlstr);
|
|
$pelicula2 = new SimpleXMLElement($xmlstr);
|
|
var_dump($pelicula1 == $pelicula2); // falso desde PHP 5.2.0
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
bool(false)
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Utilizar XPath</title>
|
|
<simpara>
|
|
SimpleXML incorpora soporte para <acronym>XPath</acronym>.
|
|
Para encontrar todos los elementos <literal><personaje></literal>:
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'ejemplo.php';
|
|
|
|
$peliculas = new SimpleXMLElement($xmlstr);
|
|
|
|
foreach ($peliculas->xpath('//personaje') as $personaje) {
|
|
echo $personaje->nombre . ' interpretado por ' . $personaje->actor, PHP_EOL;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<simpara>
|
|
'<literal>//</literal>' actúa como un comodín. Para especificar una ruta
|
|
absoluta, hay que omitir una de las dos barras.
|
|
</simpara>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
Srta. Programadora interpretado por Onlivia Actora
|
|
Sr. Programador interpretado por El ActÓr
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Establecer valores</title>
|
|
<simpara>
|
|
Los datos en SimpleXML no tienen que ser constantes. El objeto permite
|
|
que se manipulen todos sus elementos.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'ejemplo.php';
|
|
$peliculas = new SimpleXMLElement($xmlstr);
|
|
|
|
$peliculas->pelicula[0]->personajes->personaje[0]->nombre = 'Srta. Programadora';
|
|
|
|
echo $peliculas->asXML();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<peliculas>
|
|
<pelicula>
|
|
<titulo>PHP: Tras el Analilzador</titulo>
|
|
<personajes>
|
|
<personaje>
|
|
<nombre>Srta. Programadora</nombre>
|
|
<actor>Onlivia Actora</actor>
|
|
</personaje>
|
|
<personaje>
|
|
<nombre>Sr. Programador</nombre>
|
|
<actor>El ActÓr</actor>
|
|
</personaje>
|
|
</personajes>
|
|
<argumento>
|
|
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.
|
|
</argumento>
|
|
<grandes-frases>
|
|
<frase>PHP soluciona todos los problemas web</frase>
|
|
</grandes-frases>
|
|
<puntuacion tipo="votos">7</puntuacion>
|
|
<puntuacion tipo="estrellas">5</puntuacion>
|
|
</pelicula>
|
|
</peliculas>
|
|
+]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Añadir elementos y atributos</title>
|
|
<simpara>
|
|
Desde PHP 5.1.3, SimpleXML tiene la capacidad de añadir fácilmente hijos
|
|
y atributos.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'ejemplo.php';
|
|
$peliculas = new SimpleXMLElement($xmlstr);
|
|
|
|
$personaje = $peliculas->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();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<peliculas>
|
|
<pelicula>
|
|
<titulo>PHP: Tras el Analizador</titulo>
|
|
<personajes>
|
|
<personaje>
|
|
<nombre>Srta. Programadora</nombre>
|
|
<actor>Onlivia Actora</actor>
|
|
</personaje>
|
|
<personaje>
|
|
<nombre>Sr. Programador</nombre>
|
|
<actor>El Actor</actor>
|
|
</personaje>
|
|
<personaje><nombre>Sr. Analizador</nombre><actor>John Doe</actor></personaje></personajes>
|
|
<argumento>
|
|
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.
|
|
</argumento>
|
|
<grandes-frases>
|
|
<frase>PHP soluciona todos los problemas web</frase>
|
|
</grandes-frases>
|
|
<puntuacion tipo="votos">7</puntuacion>
|
|
<puntuacion tipo="estrellas">5</puntuacion>
|
|
</pelicula>
|
|
</peliculas>
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Interoperatibilidad con DOM</title>
|
|
<simpara>
|
|
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.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$dom = new DOMDocument;
|
|
$dom->loadXML('<libros><libro><titulo>bla</titulo></libro></libros>');
|
|
if (!$dom) {
|
|
echo 'Error al analizar el documento');
|
|
exit;
|
|
}
|
|
|
|
$s = simplexml_import_dom($dom);
|
|
|
|
echo $s->libro[0]->titulo;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
bla
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
</section>
|
|
|
|
<section xml:id="simplexml.examples-errors">
|
|
<title>Tratar con los errores XML</title>
|
|
<para>
|
|
Tratar con los errores XML cuando se cargan documentos es una tarea muy sencilla.
|
|
Utilizando la funcionalidad de <link linkend="book.libxml">libxml</link> es
|
|
posible suprimir todos los errores XML cuando se carga un documento para
|
|
luego recorrerlos.
|
|
</para>
|
|
<para>
|
|
El objeto <classname>libXMLError</classname>, retornado por
|
|
<function>libxml_get_errors</function>, contiene varias propiedades,
|
|
incluyendo el <link linkend="libxmlerror.props.message">mensaje</link>,
|
|
<link linkend="libxmlerror.props.line">línea</link> y <link
|
|
linkend="libxmlerror.props.column">columna</link> (posición) del
|
|
error.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Cargar un string XML erróneo</title>
|
|
<programlisting role="php" xml:id="simplexml.examples.error">
|
|
<![CDATA[
|
|
<?php
|
|
libxml_use_internal_errors(true);
|
|
$sxe = simplexml_load_string("<?xml version='1.0'><roto><xml></roto>");
|
|
if ($sxe === false) {
|
|
echo "Error cargando XML\n";
|
|
foreach(libxml_get_errors() as $error) {
|
|
echo "\t", $error->message;
|
|
}
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
Error cargando XML
|
|
Blank needed here
|
|
parsing XML declaration: '?>' expected
|
|
Opening and ending tag mismatch: xml line 1 and broken
|
|
Premature end of data in tag broken line 1
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<section role="seealso"><!-- {{{ -->
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>libxml_use_internal_errors</function></member>
|
|
<member><function>libxml_get_errors</function></member>
|
|
<member><xref linkend="class.libxmlerror" /></member>
|
|
</simplelist>
|
|
</para>
|
|
</section>
|
|
</section>
|
|
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|
|
|