
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
1 2 3 4 5 6 | $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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | //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.
1 2 3 4 5 | <? 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
1 2 3 4 5 6 | ... //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
1 2 3 4 5 | <? 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.