<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>...Microplagio... &#187; dom</title>
	<atom:link href="http://www.microplagio.com/articulos/tag/dom/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.microplagio.com</link>
	<description>Ciencia, historia, actualidad y humor...  ahh y programación</description>
	<lastBuildDate>Fri, 13 Jan 2012 00:11:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Cómo modificar documentos XML con PHP</title>
		<link>http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/</link>
		<comments>http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/#comments</comments>
		<pubDate>Thu, 13 Dec 2007 02:52:33 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Microtutoriales]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[simplexmlelement]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/articulos/2007/coacutemo-modificar-documentos-xml-con-php/</guid>
		<description><![CDATA[Bien, después de haberme atrasado casi un mes y en vista de que es un tema difícil de encontrar en la red, voy a hacer un microtutorial sobre cómo modificar un documento XML usando PHP5. Ya vimos cómo hacer un parsing a un documento XML usando la extensión que provee PHP5 llamada SimpleXMLElement. Ahora veremos primero cómo modificar elementos de nuestro XML, estamos hablando de agregar o eliminar elementos. Cómo [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-1290" title="php-xml" src="http://www.microplagio.com/imgs/2007/11/php-xml-480x480.jpg" alt="" width="200" height="200" />Bien, después de haberme atrasado casi un mes y en vista de que es un tema difícil de encontrar en la red, voy a hacer un microtutorial sobre <strong>cómo modificar un documento XML usando PHP5</strong>. Ya vimos <a href="http://www.microplagio.com/articulos/2007/como-acceder-a-los-datos-de-xml-en-php/">cómo hacer un parsing a un documento XML</a> usando la extensión que provee PHP5 llamada <strong>SimpleXMLElement</strong>. Ahora veremos primero cómo modificar elementos de nuestro XML, estamos hablando de agregar o eliminar elementos.</p>
<p><strong>Cómo agregar elementos, hijos y atributos</strong></p>
<p>Hasta PHP 5.1.3 la extensión <strong>SimpleXMLElement</strong> no tenía forma de agregar elementos a un documento XML. Sólo era posible modificar los valores de elementos o atributos pero para agregar nuevos era necesario exportar el objeto <strong>SimpleXMLElement</strong> a <acronym title="Document Object Model">DOM</acronym>, hacer los cambios y exportar de nuevo a <strong>SimpleXMLElement</strong>, lo cual era una tarea complicada. Pero la versión 5.1.3 introdujo dos nuevos métodos que nos dan el poder de modificar el documento XML. Me refiero a los métodos:</p>
<pre class="php" name="code">SimpleXMLElement::addChild();
SimpleXMLElement::addAttribute();</pre>
<p>El nombre lo dice todo, con el primero agregamos un elemento hijo al elemento en el que nos encontramos y con el segundo agregamos un atributo. <strong>addChild()</strong> acepta tres parámetros, el primero indica el nombre del nuevo elemento, el segundo es opcional e indica el valor del elemento, y el tercero también es opcional e indica el namespace al cual pertenece el elemento. <strong>addAttribute()</strong> recibe dos, el nombre del atributo y su valor.</p>
<p>Pongamos un ejemplo para ilustrar su uso. Recordemos el <a href="http://www.microplagio.com/articulos/2007/como-acceder-a-los-datos-de-xml-en-php/">ejemplo de la vez pasada</a> donde usamos un archivo XML cuyo contenido son libros con sus respectivos datos y pasemos a crear el objeto <strong>SimpleXMLElement</strong>.</p>
<pre class="php" name="code">$library = new SimpleXMLElement('library.xml', null, true);</pre>
<p>Ahora supongamos que queremos agregar un nuevo libro llamado <em>The finished mistery</em> cuyo autor es <em>J. F. Rutherford</em>, el ISBN es <em>0812550706</em> y la editorial es <em>Watchtower Society</em>.</p>
<pre class="php" name="code">$book = $library-&gt;addChild('book');
$book-&gt;addAttribute('isbn', '0812550706');
$book-&gt;addChild('title', "The finished mistery");
$book-&gt;addChild('author', 'J. F. Rutherford');
$book-&gt;addChild('publisher', 'Watchtower Society');</pre>
<p>Con eso es suficiente para modificar el contenido XML. En la primera línea estamos agregando un nuevo hijo llamado <em>book</em> al elemento raíz que es <em>library,</em> como <strong>SimpleXMLElement</strong> siempre nos regresa un objeto del mismo tipo, entonces a la variable <em>$book</em> también podemos aplicarle el metodo <strong>addChild()</strong> para crearle hijos, (que vendrían siendo los nietos de <em>$library</em>). Es como una especie de recursividad, donde podemos ir creando elementos en varios niveles, paras obtener hijos, nietos, bisnietos etc.</p>
<p>Ahora bien, hasta este punto no podemos ver cómo ha quedado nuestro documento XML. Lo siguiente será mostrarlo en el navegador. Para ello, debemos enviar una cabecera para indicar al navegador que el contenido a mostrar no es simple texto ni HTML, sino XML y después hacer la impresión del mismo.</p>
<pre class="php" name="code">header('Content-type: text/xml');
echo $library-&gt;asXML();</pre>
<p>¿Para que sirve el método <strong>asXML()</strong>? regresa el contenido XML del objeto como una cadena, pero solo si lo llamamos sin argumentos. La otra opción, que sin duda es la qué podria darnos mas usabilidad es llamarlo con un parametro que contendría una ruta a un archivo, el cual se escribirá con el contenido XML del objeto. El método <strong>asXML($string)</strong> regresará un valor de tipo boolean dependiendo del resultado de la operación.</p>
<p>¿Cómo escribir entonces un archivo XML? Supongamos que, una vez agregado el nuevo libro a nuestro archivo de libros queremos guardar los cambios. Lo único que habría que hacer es:</p>
<pre class="php" name="code">$library-&gt;asXML('library.xml');</pre>
<p>Y listo, si escribimos el nombre de un archivo que no existe, se crea automaticamente y si ya existe se sobrescribe.</p>
<p><strong>¿Cómo eliminar ahora elementos y atributos de un documento XML?</strong></p>
<p>SimpleXMLElement, no provee ningun metodo para hacerlo, sin embargo sí hay una forma de eliminar hijos. Supongamos que quiero eliminar el libro que acabo de agregar. Como es el elemento <em>book</em> número 6, solo hay que destruir el objeto que pertenece a ese hijo:</p>
<pre class="php" name="code">$library-&gt;book[5] = null;</pre>
<p>El cinco es porque los elementos empiezan a contarse desde cero. Sin embargo, hay un inconveniente; esto solo eliminara a los hijos del elemento book y a sus respectivos atributos, pero los atributos que haya al nivel de <em>book</em> permaneceran ahi. Por lo que el atributo <em>isbn</em> seguirá existiendo. Si lo igualamos a <em>null,</em> solo conseguiremos vaciar su valor pero dejando intacto al atributo.</p>
<p>Para remover efectivamente hijos y atributos, debemos exportar el objeto <strong>SimpleXMLElement</strong> a DOM, donde las funcionalidades de PHP5 para manipular los datos se hacen más poderosas. Hablaré de ello después&#8230;</p>
<p>Espero que este microtutorial sea de utilidad para quien necesite <strong>manipular datos XML con PHP 5</strong>.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/" title="Cómo acceder a los datos de XML en PHP">Cómo acceder a los datos de XML en PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/" title="Cómo obtener todos los comentarios y replies de Facebook con FQL">Cómo obtener todos los comentarios y replies de Facebook con FQL</a></li><li><a href="http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/" title="Clase para manejar base de datos MySQL en PHP">Clase para manejar base de datos MySQL en PHP</a></li><li><a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/" title="Método de Gauss en PHP">Método de Gauss en PHP</a></li><li><a href="http://www.microplagio.com/articulos/manejo-de-errores-en-php/" title="Manejo de errores en PHP">Manejo de errores en PHP</a></li><li><a href="http://www.microplagio.com/articulos/pilas-en-php/" title="Pilas en PHP">Pilas en PHP</a></li><li><a href="http://www.microplagio.com/articulos/variables-de-servidor-de-php/" title="Variables de servidor de PHP">Variables de servidor de PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
	</channel>
</rss>

