Como criar um XML com PHP

Imagem com XML

Introdução

Com o advento do XML se faz necessário saber como criar esse tipo de arquivo. Pelo fato não precisar de um editor específico para manipular esse tipo de arquivo, muitos desenvolvedores criam a estrutura em uma variável e jogam o conteúdo na função file_put_contents, por exemplo.

Exemplo de criação de XML com parsing

$content = '<root>';
$content .= '<nodeOne>valueOne</nodeOne>';
$content .= '<nodeTwo>valueTwo</nodeTwo>';
$content .= '</root>';

file_put_contents('filename.xml', $ontent);

Tudo bem, essa é uma maneira de fazer esse trabalho, entretanto, no meu ver, é bem trabalhosa e soa como um ‘workaround’, isto é, uma ‘gambiarra’ bem sacana.

O PHP 5 oferece-nos um objeto prontinho para trabalharmos com XML, veja um exemplo comentado:

Exemplo de criação de XML com DOMDocument

//Instanciamos o objeto passando como valor a versão do XML e o encoding (código de caractéres)
$dom = new DOMDocument('1.0','UTF-8');

//Nesse ponto, informamos para o objeto que não queremos espaços em branco no documento
$dom->preserveWhiteSpaces = false;

//Aqui, dizemos para o objeto que queremos gerar uma saída formatada
$dom->formatOutput = true;

//Pronto! Configurações inicias realizadas, agora partiremos para a criação dos elementos que compõe a árvore do documento XML
//Criação do elemento root (elemento pai)
$root = $dom->createElement('root');

//Vamos criar o elemento nodeOne, conforme o exemplo anterior
$nodeOne = $dom->createElement('nodeOne');

//Agora o elemento nodeTwo
$nodeTwo = $dom->createElement('nodeTwo');

//criados os elementos, vamos adicionar um valor para cada um deles
$nodeOneTxt = $dom->createTextNode('valueOne');
$nodeTwoTxt = $dom->createTextNode('valueTwo');

//Pronto! Elementos criados, o próximo passo é organizar essa bagunça, para isso, usaremos o método appendChild() e diremos quem é elemento pai e quem é elemento filho
$nodeOne->appendChild($nodeOneTxt);
$nodeTwo->appendChild($nodeTwoTxt);
$root->appendChild($nodeOne);
$root->appendChild($nodeTwo);
$dom->appendChild($root);

//Dessa forma, dissemos que os elementos nodeOne e nodeTwo são filhos do elemento root, isto é, estão dentro de root ou um nível abaixo de root.

//Para imprimir na tela, utilizamos o método saveXML()
$dom->saveXML();

//Por fim, para salvarmos o documento, utilizamos o método save()
$dom->save('filename.xml');

Se você utilizar exatamente esse código, você terá uma saída idêntica a saída mostrada abaixo.

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <nodeOne>valueOne</nodeOne>
  <nodeTwo>valueTwo</nodeTwo>
</root>

Ainda podemos escrever um atributo em um determinado elemento, para isso, basta utilizar o método setAttribute(), que possui como parâmetros o nome do atributo e o valor do mesmo, respectivamente. Vejamos um exemplo.

Exemplo de um elemento com atributo


...

//Apenas modificando o exemplo acima, vamos acrescentar a seguinte linha de código logo após a linha 18
$nodeTwo->setAttribute('attr','valueAttr');

...

Alterando o código, a saída fica assim

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <nodeOne>valueOne</nodeOne>
  <nodeTwo attr="valueAttr">valueTwo</nodeTwo>
</root>

Video-aula: Escrevendo XML com PHP 5 (DOMDocument) por lemissel no Videolog.tv.

Buenas! Espero ter ajudado os colegas.