Usando PHP para realizar a leitura de arquivos XML
Autor: Hofmann | Publicado: 2013-09-30T12:27:00-07:00




Um dos requisitos do projeto foi o uso de algum XML com DTD. Como não tinha o objetivo de inserir XML no projeto da loja Omega, não me atentei a isso desde o princípio, além do mais usaria o SQL como banco de dados. No entanto, já que foi um item obrigatório, fui “induzido” a inserir este conteúdo.
Deste modo utilizei uma função do PHP chamada SimpleXML para apenas ler um arquivo XML contendo todas as informações que precisava (até o momento).
O "simplexml_load" (chamarei-o deste modo a partir de agora) interpreta um arquivo xml e o transforma em um objeto, deste modo podemos trabalhar com ele.

Utilizei 3 arquivos:
 - produtos.xml&nbsp;- que contem todas as informações dos produtos
 - abrir_xml.php&nbsp;- apenas realiza a abertura do arquivo xml e armazena as variáveis que serão utilizadas futuramente.
 - produtos.php&nbsp;- chama o "abrir_xml.php" e exibe as informações devidamente formatadas
Não inseri o CSS para vermos o estritamente necessário, que é realizar a leitura de um arquivo xml, usando-o como um banco de dados.

Heis cada arquivo:

abrir_xml.php
&lt;?php
$id = $_GET['id'];
if ($myxml = simplexml_load_file ('produtos/produtos.xml')) {

 foreach ($myxml as $produto) {
  if ($produto-&gt;id == $id){
   $nome = $produto-&gt;nome;
   $descricao = $produto-&gt;descricao;
   $preco = $produto-&gt;preco;
   $img = $produto-&gt;img;

   &nbsp;      $dimensao = $produto -&gt; dimensao;
   $cor = $produto -&gt; cor;
   $material = $produto -&gt; material;
   &nbsp; }//fim do IF
  &nbsp; }//fim do foreach
}else{ echo 'Erro ao ler ficheiro XML'; }

?&gt;



Comentando o código anterior temos:
1ª linha - O código resgata um id enviado de outro arquivo.
2ª linha - O IF é usado para verificar se a leitura do arquivo XML foi realizada, armazenando a informação na variável $myxml.
3ª linha - com o FOREACH realizamos realmente a abertura do arquivo xml e para cada tag pai produto utilizamos as informações e tags contidas nela. O if foi usado por mim para exibir apenas as informações de um único id, mas você pode suprimir esta parte e exibir todo o conteúdo. Lembrando de que o &nbsp;você quiser que seja exibido deve estar formatado dentro do FOREACH, pois caso use o código contido neste artigo a exibição se dará apenas com as informações da última TAG XML.

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; produtos.xml - aqui apenas um breve exemplo do arquivo xml usado.
&lt;produtos&gt;
 &lt;produto&gt;
  &lt;id&gt;01&lt;/id&gt;
  &lt;nome&gt;Caneca Térmica&lt;/nome&gt;
  &lt;descricao&gt;Uma câneca que preserva quente e gelado suas bebidas favoritas. Personalize a sua!&lt;/descricao&gt;
  &lt;preco&gt;25.00&lt;/preco&gt;
  &lt;img&gt;123.jpg&lt;/img&gt;
  &lt;tipo&gt;Caneca&lt;/tipo&gt;
  
  
  &lt;dimensao&gt;15cm 10cm 10cm&lt;/dimensao&gt;
  &lt;cor&gt;Metálico&lt;/cor&gt;
  &lt;material&gt;Aço&lt;/material&gt;
 &lt;/produto&gt;

 &lt;produto&gt;
  &lt;id&gt;02&lt;/id&gt;
  &lt;nome&gt;Caneca Casados&lt;/nome&gt;
  &lt;descricao&gt;Preserve seus melhores momentos com essa linda caneca!&lt;/descricao&gt;
  &lt;preco&gt;35.00&lt;/preco&gt;
  &lt;tipo&gt;Caneca&lt;/tipo&gt;
  &lt;img&gt;caneca.jpg&lt;/img&gt;
  
  &lt;dimensao&gt;15cm 10cm 10cm&lt;/dimensao&gt;
  &lt;cor&gt;Branco com Textura&lt;/cor&gt;
  &lt;material&gt;Porcelana&lt;/material&gt;
 &lt;/produto&gt;
      &lt;/produtos&gt;

&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;produtos.php
&lt;?php
 include "produtos/abrir_xml.php";//chama a abertura do arquivo xml e inicia as variáveis utilizadas a seguir
if (!empty($id)){
      ?&gt; 
  &lt;div id="produto"&gt;
            &lt;img src="produtos/&lt;?php echo $img?&gt;" /&gt;
                 &lt;div class="inf_produto"&gt;
                  &lt;span&gt;&lt;?php echo $nome?&gt;&lt;br /&gt;&lt;/span&gt;
                        &lt;small&gt;&lt;?php echo $descricao ?&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;
                        &lt;p&gt;&lt;strong&gt;Você ainda pode Parcelar.&lt;/strong&gt;&lt;/p&gt;
                  &lt;/div&gt;&lt;!-- fim inf_produto --&gt;
                &lt;div id="tabela_detalhes_produto"&gt;
                 &lt;table width="690" border="0"&gt;
                   &lt;thead&gt;
                     &lt;td width="127"&gt;Características&lt;/td&gt;
                     &lt;td width="385"&gt;Valores&lt;/td&gt;
                   &lt;/thead&gt;
                   &lt;tbody&gt;
                       &lt;tr&gt;
                         &lt;td width="111"&gt;Dimensões:&lt;/td&gt;
                         &lt;td width="35"&gt;&lt;?php echo $dimensao ?&gt; &lt;/td&gt;
                       &lt;/tr&gt;
                       &lt;tr&gt;
                         &lt;td&gt;Cor(es):&lt;/td&gt;
                         &lt;td&gt;&lt;?php echo $cor ?&gt;&lt;/td&gt;
                       &lt;/tr&gt;
                       &lt;tr&gt;
                         &lt;td&gt;Material:&lt;/td&gt;
                         &lt;td&gt;&lt;?php echo $material ?&gt;&lt;/td&gt;
                       &lt;/tr&gt;
                   &lt;tbody&gt;
                 &lt;/table&gt;
                 &lt;/div&gt;
    &lt;/div&gt;

&lt;?php
}
?&gt;

Comentando o código temos:
1º - A inclusão da abertura do arquivo xml
2º - Como as variáveis já estão configuradas em "abrir_xml.php", o que fazemos a seguir é apenas exibir as informações necessárias.
3º - IMPORTANTE - Lembra que o arquivo "abrir_xml.php" realiza um GET por um id? Então... este é usado quando você fizer a referência ao arquivo "produtos.php". Deste modo apenas a id referida no link é exibida, caso contrário nada é exibido.Ficaria da seguinte forma:

&lt;a href="produtos.php?id=1"&gt; Produto 1&lt;/a&gt;
&lt;a href="produtos.php?id=2"&gt; Produto 2&lt;/a&gt;