<?xml version="1.0" encoding="UTF-8"?>
<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>Diego Henrique &#187; xml</title>
	<atom:link href="http://www.diegoholiveira.com/blog/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diegoholiveira.com/blog</link>
	<description></description>
	<lastBuildDate>Fri, 08 Jan 2010 11:53:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Manipulando XML com a SimpleXML</title>
		<link>http://www.diegoholiveira.com/blog/2009/04/30/manipulando-xml-com-a-simplexml/</link>
		<comments>http://www.diegoholiveira.com/blog/2009/04/30/manipulando-xml-com-a-simplexml/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 23:44:36 +0000</pubDate>
		<dc:creator>Diego Henrique</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.diegoholiveira.com/blog/?p=145</guid>
		<description><![CDATA[Quando eu começei a trabalhar com XML, principalmente em aplicações ajax, eu custumava fazer XML na mão, como se fossem string&#8217;s. Funcionavam, é verdade, mas não era uma boa solução, e na epoca eu pensava que a SimpleXML só servia para ler xml. Ledo engano. A SimpleXML é bem mais poderosa do que eu imaginava, [...]]]></description>
			<content:encoded><![CDATA[<p>Quando eu começei a trabalhar com XML, principalmente em aplicações ajax, eu custumava fazer XML na mão, como se fossem string&#8217;s. Funcionavam, é verdade, mas não era uma boa solução, e na epoca eu pensava que a SimpleXML só servia para ler xml. Ledo engano.</p>
<p>A SimpleXML é bem mais poderosa do que eu imaginava, ela pode manipular XML da forma que você precisar, seja apenas para leitura ou para alteração.</p>
<p>Vou mostrar algum codigo pra provar que a SimpleXML é realmente muito simples.</p>
<p>Instanciando um objeto para gerar um XML:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;">$xml = simplexml_load_string( &#8216;<span class="sy1">&lt;?</span>xml version<span class="sy0">=</span><span class="st0">&quot;1.0&quot;</span> encoding<span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span><span class="sy1">?&gt;</span>&lt;root&gt;&lt;/root&gt;&#8217; );</div>
</div>
<p>Ou entao você pode carregar um arquivo XML:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$xml</span> <span class="sy0">=</span> <a href="http://www.php.net/simplexml_load_file"><span class="kw3">simplexml_load_file</span></a><span class="br0">&#40;</span> <span class="st_h">&#8216;arquivoXML.xml&#8217;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>A partir disso você pode manipular o XML como quiser. Vamos supor que você queira adicionar nós com atributos. Dois metodos são importantes agora: addChild e addAttribute. Um exemplo do metodo addChild:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$xml</span><span class="sy0">-&gt;</span><span class="me1">addChild</span><span class="br0">&#40;</span><span class="st_h">&#8216;database&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Isso geraria um xml assim:</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;root<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;database<span class="re2">&gt;</span></span><span class="re1">&lt;/database<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/root<span class="re2">&gt;</span></span></span></div>
</div>
<p>Agora suponhamos que queremos adicionar um novo nó dentro de database chamado connection com varios atributos:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$xml</span><span class="sy0">-&gt;</span><span class="me1">database</span><span class="sy0">-&gt;</span><span class="me1">addChild</span><span class="br0">&#40;</span><span class="st_h">&#8216;connection&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$xml</span><span class="sy0">-&gt;</span><span class="me1">database</span><span class="sy0">-&gt;</span><span class="me1">connection</span><span class="sy0">-&gt;</span><span class="me1">addAttribute</span><span class="br0">&#40;</span><span class="st_h">&#8216;server&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;localhost&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$xml</span><span class="sy0">-&gt;</span><span class="me1">database</span><span class="sy0">-&gt;</span><span class="me1">connection</span><span class="sy0">-&gt;</span><span class="me1">addAttribute</span><span class="br0">&#40;</span><span class="st_h">&#8216;user&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;root&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$xml</span><span class="sy0">-&gt;</span><span class="me1">database</span><span class="sy0">-&gt;</span><span class="me1">connection</span><span class="sy0">-&gt;</span><span class="me1">addAttribute</span><span class="br0">&#40;</span><span class="st_h">&#8216;pass&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8217;123&#8242;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$xml</span><span class="sy0">-&gt;</span><span class="me1">database</span><span class="sy0">-&gt;</span><span class="me1">connection</span><span class="sy0">-&gt;</span><span class="me1">addAttribute</span><span class="br0">&#40;</span><span class="st_h">&#8216;schema&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;tabela&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Com os codigos acima nosso XML ficaria assim:</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;root<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;database<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;connection</span> <span class="re0">server</span>=<span class="st0">&quot;localhost&quot;</span> <span class="re0">user</span>=<span class="st0">&quot;root&quot;</span> <span class="re0">pass</span>=<span class="st0">&quot;123&quot;</span> <span class="re0">schema</span>=<span class="st0">&quot;tabela&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/database<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/root<span class="re2">&gt;</span></span></span></div>
</div>
<p>Viu como é simples manipular XML com a SimpleXML?<br />
Ah, se você precisar apagar um nó é ainda mais simples, basta usar o velho e conhecido unset, assim:</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;">unset( $xml-&gt;database-&gt;connection );</div>
</div>
<p>E se você precisar salvar essa XML em arquivo é só usar a função file_put_contents, assim:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><a href="http://www.php.net/file_put_contents"><span class="kw3">file_put_contents</span></a><span class="br0">&#40;</span> <span class="st_h">&#8216;arquivoSaida.xml&#8217;</span><span class="sy0">,</span> <span class="re0">$xml</span><span class="sy0">-&gt;</span><span class="me1">asXML</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Então é isso, qualquer duvida sobre manipulação de XML posta ae nos comentarios.</p>
<p> <img src='http://www.diegoholiveira.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Referencias:<br />
Manual do PHP: http://br.php.net/manual/en/ref.simplexml.php</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diegoholiveira.com/blog/2009/04/30/manipulando-xml-com-a-simplexml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
