SimpleXML: Manipulando arquivos XML no PHP

in #php6 years ago

php-xml-480x480.jpg

O que é XML?

A eXtensible Markup Language (ou XML para quem tem intimidade) é uma recomendação da W3C para gerar linguagens de marcação para necessidades especiais. Isso quer dizer que o XML pode ser usado para tabular informações dentro de um determinado padrão fácil de ser compreendido e assim, permitindo a troca de informações de forma mais simples. Na internet, isso é uma "mão na roda", já que sites e sistemas web (ou desktop) muitas vezes são feitos em linguagens de programação diferentes, usam diferentes bancos de dados, estruturas de redes e até sistemas operacionais.

O formato desses arquivos é simples. Eles sempre começam com um cabeçalho como esse:

<?xml version="1.0" encoding="UTF-8"?>

Essa tag indica que isso é um documento xml.

Ele também pode (nem sempre é, mas pode) ser salvo em um arquivo com extensão xml (ex: cidades.xml).

Dentro desse documento, os dados são estruturados dentro de tags que, geralmente (mas nem sempre) tem uma tag de abertura e outra de fechamento. Ex:

<contatos>

  <contato>

    <nome>Fulano de Tal</nome>

    <telefone>(44)9999-8888</telefone>

  </contato>

  <contato>

    <nome>Beltrano da Silva</nome>

    <telefone>(41)99999-9999</telefone>

  </contato>

</contatos>

O exemplo acima mostra como podemos organizar uma lista de contatos usando xml. Grave todo esse conteúdo em um arquivo (vamos escolher um nome bem criativo, tá?) chamado contatos.xml e pronto, você tem um documento XML que você pode manipular usando PHP.

Lendo arquivos com SimpleXML

Para que possamos fazer isso, vamos usar uma biblioteca nativa do PHP chamada SimpleXML. Ela oferece uma forma simples de carregar os dados de um documento para sua posterior manipulação. Vamos começar gravando os dados da nossa lista de contatos em XML em um banco de dados:

<?php
$contatos = simplexml_load_file("contatos.xml");

foreach($contatos->contatos as $contato){

    $nome = $contato->nome;

    $telefone = $contato->telefone;

    $sql = "insert into contatos (nome,telefone) values ('$nome','$telefone');";

    mysqli_query($sql);

}
?>

Como podem ver, gosto de usar MySQL, mas depois do sql gerado, ele pode ser salvo em qualquer banco de dados.

Usamos o comando simplexml_load_file() para carregar o conteúdo do arquivo xml para a variável contatos. Ela então torna-se um objeto estruturado conforme as orientações do documento.Essa estrutura permite que façamos um loop usando o foreach e assim percorrendo todos os dados contidos no documento. A cada volta do loop, os dados são transferidos para outras variáveis (aproveite esse momento para tratar esses dados) que formarão o comando SQL, que por sua vez vai gravar essas informações no banco de dados.

Se o conteúdo que queremos manipular estivesse em uma variável em vez de um arquivo (você pode ter criado um xml "na hora", por exemplo), trocaríamos o comando simplexml_load_file() por simplexml_load_string(). O restante, ficaria do mesmo jeito.