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.