Gerar XML com PHP

Gerando XML com PHP5

Esse Post foi movido para :

http://clares.com.br/2008/02/10/gerando-xml-com-php/

Desculpe pelo transtorno, aproveite para assinar o novo blog.

Marcado:,

44 pensamentos sobre “Gerar XML com PHP

  1. Michel março 3, 2008 às 6:30 pm

    Cara, como seria para LER um arquivo XML ?

  2. clares março 3, 2008 às 7:08 pm
  3. Laerti Borba maio 18, 2008 às 6:49 pm

    Cara, muito bom este seu exemplo, me ajudou muito, pois tinha uma prova onde deveria criar um formulario em PHP e ele submeter os dados para um arquivo XML, e foi com esta sua dica que me salvou. Valeu.
    Laerti

  4. Ivaldo Trentin junho 25, 2008 às 4:13 pm

    Kra, muito lega a maneira que usou para explicar a maioria dos lugares usa a criação de arquivos xml da mesma maneira que criamos os txt, somente concatenando string… dessa maneira fica muito mais simples e claro o codigo.

  5. Glauber dezembro 28, 2008 às 7:52 pm

    Show de bola!!
    Parabéns!!

  6. Gabriel Lau fevereiro 19, 2009 às 5:26 pm

    Rafael, tem como tu dar um exemplo de como seria usando um banco de dados???
    Tipo: Sempre que eu inserir um registro novo no banco, ele pega os dados que já tem lah, e atualiza essa lista no xml…

    Está show de bola essa sua solução para gerar XML… já está no meu BLOG.. ;)

    • Rafael Clares fevereiro 20, 2009 às 12:12 am

      Gabriel, beleza ai…então tá!
      Cara, para fazer com BD basta você trocar as linhas onde os dados são inseridos manualmente, mas isso é bem óbvil, ok, vamos lá…
      coloque as linhas abaixo dentro do seu laço que está retornando os dados do BD, agora se você quer aprender à utilizar um BD é outra coisa… infelizmente não é o propósito do Post.
      Supondo que você utiliza Postgre e ja chamou a conexao com o banco:
      //conexao ok
      $strQuery = “select * from clientes”;
      $query = pg_query($strQuery);
      while ($row = pg_fetch_array($query))
      {
      $nome = $row[‘nome’];
      $telefone = $row[‘telefone’];
      $endereco = $row[‘endereco’];
      $nome = $dom->createElement(”nome”, “$nome”);
      $telefone = $dom->createElement(”telefone”, “$telefone″);
      $endereco = $dom->createElement(”endereco”, “$endereco″);
      $contato->appendChild($nome);
      $contato->appendChild($telefone);
      $contato->appendChild($endereco);
      $root->appendChild($contato);
      }

      Seria algo do tipo acima… num post futuro farei isso.

  7. Alexandre maio 7, 2009 às 1:00 pm

    Olá Rafael,
    Excelente trabalho, mas precisava de um help seu!

    Utilizei essa função em um projeto recente, porém ao obter do bd dados acentuados ocorre o seguinte warning:
    —————————————-
    Erro no processamento de XML: caracteres inúteis após um elemento do documento
    Posição: xml_fichas_export.php
    Número da linha 2, coluna 1:Warning: DOMDocument::save() [function.DOMDocument-save]: output conversion failed due to conv error, bytes 0xC3 0x4F 0x20 0x50 in X:\mowes\www\xml_fichas_export.php on line 192
    ^
    —————————————-

    A linha em questão é sempre exatamente onde está a palavra acentuada. Troquei o padrão para UTF-8 e deu certo, porém o cliente ao importar exige que seja utilizado ISO-8859-1:

    $dom = new DOMDocument(“1.0”, “UTF-8”);
    $dom = new DOMDocument(“1.0”, “ISO-8859-1”);

    Saberia me dizer uma solução para o problema?

    Obrigado!

    • Rafael Clares maio 7, 2009 às 1:05 pm

      Alexandre,
      já tentou usar o utf8_decode($var) nas palavras/strings/vars com acentos ?
      De toda forma, o caminho é por aí ! Utilize encode/decode das strings/vars que compõe o XML!
      abraços,

  8. Bruno junho 22, 2009 às 1:44 pm

    Prezado Clares…

    Eu gostaria de aprender inserir um nodo antes (ou depois) de algum outro nodo específico no arquivo xml já existente.

    Tem como me ajudar nessa?

  9. Cadu setembro 25, 2009 às 12:52 pm

    Muito boa a dica! Simples e eficiente!

    Parabéns!

  10. Jose Ricardo outubro 1, 2009 às 1:37 pm

    Saudações…
    Interessante esse exemplo, gostei muito mas estou com um pequeno problema…
    minha aplicação é assim:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $urlapf);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $Resposta = curl_exec($ch);
    curl_close($ch);

    Depois disso, faço o tratamento necessário, separo as devidas informações em variáveis e vizualizo na tela.
    Funcionando tudo blz…
    Quando vou gerar o xml ele não está puxando os valores

    $dado1 = $dom->createElement(“dado1”, “$Dado01”);
    $dado2 = $dom->createElement(“dado2”, “$Dado02”);
    $dados_principais->appendChild($dado1);
    $dados_principais->appendChild($dado2);

    O que pode estar acontecendo?????

  11. Alcir fevereiro 2, 2010 às 2:53 pm

    como faco para inserir atributos com api DOM

  12. fernando fevereiro 12, 2010 às 4:33 pm

    bom material amigo

  13. Neto março 20, 2010 às 5:10 pm

    Olá,ótimo artigo!
    exatamente o que procurava.

    Abraços.

  14. Diogo junho 7, 2010 às 1:44 pm

    Oi Rafael, consegui utilizar teu código perfeitamente, está lista até do banco de dados.

    Mas tenho uma dúvida, como faço para apenas exibir as informações e não salvar??

    Abraço.

    • Rafael Clares junho 7, 2010 às 1:57 pm

      Diogo, basta comentar a linha abaixo:
      $dom->save(“contatos.xml”)

      abraços

  15. Carlos Correa julho 7, 2010 às 2:45 pm

    Excelente, não conhecia essa API, muito prática para criação de conteúdo. Irei utiliza-la para a integração do meu sistema com NFe.
    Valeu pela dica.

    Abraços

  16. Tamar outubro 12, 2010 às 10:17 pm

    cara como o wordpress cria o arquivo xml para feeed(rss), pois não esta mostrando as imagens dos meus post, deve estar faltando alguma linha de código.. grato (papertoyart.com)

    • Rafael Clares outubro 12, 2010 às 10:19 pm

      cara, eu não sei como o wordpress cria os arquivos para feeds!
      Mas se quiser ver como criar feeds, dê uma busca no blog, tem um exemplo básico!

  17. Giancarlo outubro 22, 2010 às 12:30 pm

    desculpa ressussitar aki, mas eu to querendo adicionar uma coisa do tipo mas estou com umas dificuldades…se puder ajudar nesse sentido…vlws ae

    • Rafael Clares outubro 22, 2010 às 5:10 pm

      Giancarlo, rs rs nossa cara você pode perguntar à vontade mas confesso que não entendi muito o que quis dizer.
      Bem, me fale o que são as “coisas do tipo” e depois o “sentido” para eu poder tentar ajuda-lo ok, me fale da dificuldade.
      um abraço

  18. dyegoreisa novembro 5, 2010 às 3:14 am

    Muito prático.
    Me ajudou muito!

  19. Samuel novembro 28, 2010 às 9:42 pm

    Olá, gostei muito deste POST, e aproveitei para mandar um comentário, acessem o site: http://syslep.wordpress.com/, para ver alguns POST de Criação de LOGI com um PACKAGE nos mesmo criamos.

  20. valmir santos janeiro 27, 2011 às 2:03 am

    o legal, muito bom esse post, foi de muito ajuda, obrigado.

  21. panetony abril 7, 2011 às 12:21 am

    Rafael,

    seu artigo me ajudou bastante… valeu!

    estou com uma dúvida, e gostaria de saber se você pode me ajudar… é o seguinte… se eu coloco no xml o caracter especial & é salvo como &

    ok… é isso que gostaria que fizesse mesmo…

    porem qdo coloco ” o xml salva como ” e gostaria que salvasse como "

    será que poderia me ajudar com isso ?!

    valeu !

    abraço

    • Rafael Clares abril 7, 2011 às 1:40 am

      Rapaz, não entendi muito bem não … você coloca um caracter e quer que apareça outro, é isso?

  22. Matheus abril 13, 2011 às 1:14 am

    Poxa sou novo aqui mas cheguei pra ficar, esse blog é animal mano… muitas dúvidas que eu tinha estão aqui solucionadas, até mesmo uma coisa que eu precisei fazer e com muito custo você explicou aqui perfeitamente e bem fácil.

    Parabéns, continue assim eu gostaria de aproveitar e deixar um pedido…

    POR FAVOR, FAÇA MAIS AULAS DE XML COM PHP POR FAVOR…..

    Valeu

    • Rafael Clares abril 17, 2011 às 11:41 pm

      Valeu Matheus, pode deixar vou escrever sim, é que esse mês tem sido muito corrido. abs

  23. Raphael abril 13, 2011 às 5:31 pm

    Ele quer saber se deve colocar & ou & para exibir o “&”
    No caso, o correto seria & creio eu.

  24. Erick Menezes julho 26, 2011 às 6:53 pm

    Boa Eu nao to conseguindo salvar ele exibe no firefox e no Ie normal mas nao salva no servidor
    to rodando IIS 5.1 aki tem que configurar permição de pasta para gravar ? ja tentei de varias formas mas nada
    OBS: as duas ultimas linhas eu ja tentei das duas formas com echo e sem mas nada

    createElement(“enviar”);
    $tipoElm = $document->createElement(“tipo”, $tipo);
    $nomeElm = $document->createElement(“nome”, $nome);
    $endElm = $document->createElement(“endereco”, $end);
    $cmdElm = $document->createElement(“cmd”, $cmd);
    $contato->appendChild($tipoElm );
    $contato->appendChild($nomeElm);
    $contato->appendChild($endElm);
    $contato->appendChild($cmdElm);
    return $contato;
    }
    $dom = new DOMDocument(“1.0”, “ISO-8859-1”);
    $dom->preserveWhiteSpace = false;
    $dom->formatOutput = true;
    $root = $dom->createElement(“comando”);
    $escrever = addContato($dom, “Tipo0”, “MRmenezes”, “0”, “TELNET”);
    $root->appendChild($escrever);
    $dom->appendChild($root);
    header(“Content-Type: text/xml”);
    print $dom->saveXML();
    echo $dom->save(“cmd.xml”);
    $dom->save(“agenda.xml”);
    ?>

    • Rafael Clares julho 27, 2011 às 7:07 pm

      Erick, no IIS 5 não sei te dizer ao certo cara mas tente passar o caminho absoluto de onde quer salver para fazer um teste. ex: $dom->save(“c:\\temp\\agenda.xml”);
      De toda forma tente me passar alguma mensagem de erro se houver alguma sendo exibida!

  25. Tiago Sutil setembro 25, 2011 às 9:44 pm

    Não to conseguindo salvar o arquivo ele da esse erro de permissão negada, por fazvor se conseguir me ajudar eu agradesso. Ja tentei colocar o caminho por extenso, tentei com

    $dom -> save ( $_SERVER [ ‘DOCUMENT_ROOT’ ]. ‘eventos.xml’ );

    o erro é sempre o mesmo

    Warning: DOMDocument::save(/dados/www/dominios/htdocs/nosite/www.nosite/eventos.xml) [function.DOMDocument-save]: failed to open stream: Permission denied in /dados/www/dominios/htdocs/nosite/www.nosite/geraxmleventos.php on line 53

    • Rafael Clares outubro 5, 2011 às 3:34 am

      Tiago, permissão você dá na pasta onde está tentando salvar… tem que dar permissão de gravação, se estiver hospedado em algum local, você muda a permissão pelo FTP, alterando para 0776 a permissão da pasta.

      • Tiago Sutil outubro 5, 2011 às 6:15 am

        Eu consegui dando a permissão 777. Vlw otimo post.

        Fujindo do proposto gostaria de trocar ideias uma hora dessas entre a troca de informação entre flash (via java script) chamando em uma paginas em php ou html… Depois de muito fazer ainda bato a cabeça com o IE, tipo ele so funciona com o modo de compatibilidade ativado.

        Bom vlw. Abrass

  26. Dimitri Vargas Figueiredo Guimarães abril 2, 2012 às 4:30 am

    Obrigado, você me ajudou muito.

  27. Samuel julho 17, 2012 às 10:53 pm

    Olá, imagine que o meu XML é o seguinte:

    musicas/GATA.mp3
    Gata de Junho
    InovaSamba

    Se eu seguir a risca o exemplo acima, funciona, porem ele replica o nó que seria o meu principal, . Como faço para apenar replicar do nó para frente?

    • Rafael Clares agosto 1, 2012 às 3:44 pm

      Precisaria ver o seu código PHP para entender o que há!

  28. Jean Carlos outubro 14, 2012 às 4:29 am

    Olá! Estou tentando fazer da seguinte forma!

    Estou com um formulario de cadastro. Gostaria que ele enviasse os dados para outro php, esse transformava os dados em xml. até aqui tudo bem, mas ao invés de salvar ele no pc, pegasse o $dom e enviasse como anexo por email.

    Poderia me ajudar?

    • Rafael Clares outubro 16, 2012 às 4:21 pm

      Jean, cara não entendi muito bem. Enviar o dom em anexo? Rapaz, nunca vi isso não, não seria o caso de enviar o XML por email?

      • Jean Carlos outubro 16, 2012 às 4:25 pm

        Isso, eu gostaria de enviar o XML como anexo sem precisar salvar ele localmente no servidor

      • Rafael Clares outubro 16, 2012 às 4:29 pm

        Jean, não tem como anexar algo que não existe fisicamente, o que faço é o seguinte:
        1 – crio o arquivo no disco
        2 – anexo e envio por email
        3 – apago o arquivo do disco

        Leia o post sobre o PHPMailler, nele tem uma função simples para anexar arquivos, daí ficaria algo assim:

        $dom->save(“contatos.xml”); //grava no disco
        $mail->AddAttachment(“contatos.xml”); // esse método é do phpmailer para anexar arquivos
        $mail->send();
        @unlink(“contatos.xml”); //remove o arquivo do servidor

Os comentários estão desativados.

%d blogueiros gostam disto: