Ler XML com PHP

Lendo um arquivo XML com o PHP5

Esse Post foi movido para :

http://clares.com.br/2008/08/17/ler-xml-com-php/

Desculpe pelo transtorno, aproveite para assinar o novo blog.

About these ads

Marcado:, ,

111 thoughts on “Ler XML com PHP

  1. simei setembro 10, 2008 às 12:09 am

    Valeu a dica e o como fazer um xml… gostei

  2. Alexandro Costa novembro 27, 2008 às 12:39 pm

    Parabéns pelo código rapaz.
    Muito útil para quem está começando.
    Me serviu bem.

  3. Guilherme fevereiro 13, 2009 às 11:53 pm

    Colega,
    Estou tentando implementar um codigo pra ler as acoes da bovespa, mas o formato gerado pelo webservice deles é diferente.

    Olhe só:

    http://www.bovespa.com.br/Cotacoes2000/formCotacoesMobile.asp?codsocemi=PETR4

    Código gerado

    Ou seja, tem uma chave, e várias informacoes dentro deste…

    Você sabe como fazer a leitura de cada campo de informacao nesse caso ?

    Grato

    • Rafael Clares fevereiro 14, 2009 às 12:32 am

      Olá Guilherme, é preciso ler os atributos do nó!
      Faça o seguinte:

      $xml = simplexml_load_file("linkDaBovestaAqui");
      foreach($xml->PAPEL[0]->attributes() as $a => $b) {
      echo "$a = $b ";
      }

      Espero ter ajudado!

  4. Allan março 12, 2009 às 2:37 pm

    Cara,valeu demais,tava procurando por isso !

  5. Andrei março 19, 2009 às 8:49 pm

    Olá!
    Muito legal o artigo! Parabéns e obrigado, ajuda muitas pessoas!
    Tenho uma dúvida:

    gostaria de ler os valores Low, High e text.. como procedo neste caso?

    Obrigado!

  6. Andrei março 19, 2009 às 8:51 pm

    Ah, nem me liguei nos códigos html e aspas.. aqui vai corrigido, sem os códigos:
    yweather:forecast day=Thu low=17 high=27 text=Mostly Cloudy

    • Rafael Clares março 20, 2009 às 3:00 pm

      Andrei, obrigado pelo comentário.
      Cara, preciso ver o XML inteiro para te ajudar. Mas de toda forma a solução será a mesma que dei 3 comentários acima para o Guilherme.
      Trata-se de ler os atributos de um nó com o método attributes() do simplexml.

      foreach($xml->SuaTagNo[0]->attributes() as $a => $b) {
      echo “$a = $b “;
      }
      Sem o XML inteiro não rola, se quiser me envie o link do XML ou o arquivo (rafadinix@gmail.com).

      flw

  7. Andrei março 20, 2009 às 3:28 pm

    Olá!
    Inicialmente, obrigado pela resposta e a ajuda!
    O xml (rss) que quero utilizar é este:

    http://weather.yahooapis.com/forecastrss?p=BRXX1781&u=c

    achei outras formas de extrair os dados que quero, mas nao buscando especificamente o nó do xml, só usando a função preg_match() mesmo.

    Se puder ajudar, excelente, mas nem se estresse muito também.
    obrigado!

  8. luiz tarabal julho 8, 2009 às 7:31 am

    Very nice!!!

    simple_xml always!

    thanks

  9. klonder outubro 28, 2009 às 2:49 am

    Excelente explicação! Será muito útil pra mim!

    Muito obrigado!

  10. Eduardo Faria novembro 5, 2009 às 6:34 pm

    Vlw pakas! ajudou bastante! era o que eu estava precisando. =D

  11. Fernando janeiro 4, 2010 às 1:46 pm

    Parabéns… excelente artigo!!

    .

  12. Eric Malzone janeiro 18, 2010 às 5:12 pm

    Excelente artigo, vou montar uma estrutura em um site de forma que crie um arquivo XML e depois somente faça a leitura do mesmo para evitar acessos ao banco que torna o site muito demorado as vezes…obrigado!

  13. Alcir janeiro 22, 2010 às 7:42 am

    Massa… paragens pelo blog…

  14. Felipe Marciano janeiro 28, 2010 às 8:30 pm

    Nossa, mandou muito bem na explicação! Clara e sucinta, a melhor que eu já vi! Parabéns e sucesso!
    Abraço.

  15. Mario abril 29, 2010 às 4:50 pm

    Eu não entendo a utilização do utf8_decode().

    O manual do PHP diz:

    This function decodes data, assumed to be UTF-8 encoded, to ISO-8859-1.

    Se a codificação do arquivo .xml é iso-8859-1, os dados carregados não deveriam vir com esse mesmo padrão?

    []’s
    Mario

  16. thiago corradi maio 12, 2010 às 1:55 pm

    Olá Rafael j usei uma galeria sua que funcionou 100% ja ate te amdnei o link para ver…

    Agora estou com um problema aqui não mexo muito em programação e tenho q publicar uns arquivos em xml na web são relatorios como que faço tenho que parser todo o codigo java? ou exite algum frameworks que vc indica o xml na pasta tal e ele imprimir na tela o relatório?

    caso nao consiga fazer vc conraria quanto pra fazer um arquivo desse

    • Rafael Clares maio 16, 2010 às 2:18 pm

      Olá Thiago, poxa cara precisa passar mais detalhes sobre o programa.
      Passa aí seu msn.
      abraços

  17. Augusto maio 21, 2010 às 5:52 pm

    Ai fica mais mole que sopa de minhoca ! ! !
    Obrigado ai Rafael!!!!

  18. Raphael junho 15, 2010 às 1:13 pm

    Muito útil, valeu irmão.

  19. Geovani agosto 18, 2010 às 3:10 pm

    vlw irmao, tava precisando hehehe

  20. Thiago setembro 1, 2010 às 5:27 pm

    Show de Bola!!! Ta tirando a galera do sufoco!

  21. Carlos setembro 21, 2010 às 1:00 pm

    Olá, Rafael!

    Estou com um sério problema… O método retorna o seguinte erro no Browser:

    ———————————————————————————————————
    A PHP Error was encountered

    Severity: Warning

    Message: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, ‘<' not found

    Filename: controllers/site.php

    Line Number: 39

    A PHP Error was encountered

    Severity: Warning

    Message: SimpleXMLElement::__construct() [simplexmlelement.--construct]: arquivo.xml

    Filename: controllers/site.php

    Line Number: 39

    A PHP Error was encountered

    Severity: Warning

    Message: SimpleXMLElement::__construct() [simplexmlelement.--construct]: ^

    Filename: controllers/site.php

    Line Number: 39

    String could not be parsed as XML
    ———————————————————————————————————–

    Já tentei de tudo!!!!! Sabe o q pode estar acontecendo??!!

    Muito obrigado!!!!

    Abraços,
    Carlos.

    • Rafael Clares setembro 21, 2010 às 3:49 pm

      Carlos, seu XML é invalido, dê uma olhada se não tem caracter não permitido no XML como quebra de linhas ou algo do tipo, qualquer coisa posta o XML.

  22. Carlos setembro 21, 2010 às 5:16 pm

    Obrigado, Rafael! Realmente havia um problema no xml.

    Tenho uma outra dúvida… Essa p/ salvar minha vida! rs.

    Tenho o seguinte xml válido:

    ———————————————————————————–

    54.00
    arquivo1.xls
    Conta de Telefonia

    132.40
    arquivo2.xls
    Conta de Telefonia

    98.05
    arquivo3.xls
    Conta de Telefonia

    ——————————————————————————————

    Como eu faço para q, ao ler esse arquivo com a função $xml = simplexml_load_file(“info.xml”), monte um loop que leia os atributos do xml e me retorne os nós de “valor”, “link” e “descrição” para o atributo numero igual à “2492133887”?

    Procurei na web mas não consigo solucionar essa questão! Poderia me ajudar??

    Grande abraço e agradeço desde já!

    Carlos.

    • Rafael Clares setembro 21, 2010 às 5:32 pm

      Carlos, sinto prazer em ajudar, mas cara… não adianta postar 100 comentários um atrás do outro que não vai contribuir para que eu lhe ajude mais rapidamente… Antes de postar a dúvida dê uma olhada ou faça uma busca no blog para ver se já não existe a solução, geralmente quando já tem no blog eu nem respondo.
      Quanto à busca dentro do XML: http://clares.wordpress.com/2008/12/04/busca-em-xml-com-php/
      Quanto aos atributos: http://br3.php.net/manual/en/book.xmlwriter.php
      abraços

      • Carlos setembro 21, 2010 às 6:21 pm

        Olá, Rafael.

        Acho q fui mal interpretado… Os comentários que postei em sequência se deu ao fato d q o xml q eu estava colando no corpo da mensagem não estava sendo reconhecido pelo seu blog como um string… Então tive que substituir os nós pelo caracter “[ ]“. Como pode ver no último post, até pedi desculpas por isso.

        Obrigado pelos links e parabéns pelo trabalho. Desculpe se lhe trouxe algum transtorno.

      • Rafael Clares setembro 21, 2010 às 6:23 pm

        Tá firmeza man. Fique à vontade, se eu puder ajudar então beleza.
        Desculpe ae tbm ok :(
        abraços

  23. Carlos setembro 21, 2010 às 5:26 pm

    [contas]
    [linha numero="2182965991"]
    [valor]54.00[/valor]
    [link]arquivo1.xls[/link]
    [descricao]Conta de Telefonia[/descricao]
    [/linha]
    [linha numero="2492133887"]
    [valor]132.40[/valor]
    [link]arquivo2.xls[/link]
    [descricao]Conta de Telefonia[/descricao]
    [/linha]
    [linha numero="2194107000"]
    [valor]98.05[/valor]
    [link]arquivo3.xls[/link]
    [descricao]Conta de Telefonia[/descricao]
    [/linha]
    [/contas]

  24. Carlos setembro 21, 2010 às 5:27 pm

    Agora foi! substituí o “” por “[]”. :-)

    Pode apagar os outros. Foi mal! :-(

  25. victor matuk janeiro 21, 2011 às 11:44 pm

    show. melhor dica q achei =)

  26. Bruno Costa janeiro 29, 2011 às 5:52 pm

    Só tem uma coisa errada nesse código…. você não pode utilizar o shortcode para abrir o php, ou seja, ao inves de usar <? use <?php

    Mas o código é simples e util

    • Rafael Clares janeiro 29, 2011 às 11:38 pm

      Bruno, se não pudesse utilizar, ele não estaria disponível no PHP e o código não funcionaria.
      Ah, acho que você quis dizer “short tag”.
      Obrigado pelo comentário.

  27. Vasco fevereiro 12, 2011 às 12:17 am

    Gostava de saber qual o código PHP para, através de um parâmetro de pesquisa num formulário, obter apenas o registo(s) correspondente(s) do ficheiro XML.
    Agradeço.

    • Rafael Clares fevereiro 15, 2011 às 12:36 pm

      Vasco, a busca seria esse post: http://clares.wordpress.com/2008/12/04/busca-em-xml-com-php/
      Daí precisa fazer o formulário para enviar os parâmetros para esse arquivo que faz a busca no XML, se for isso mesmo que quer fazer(busca dentro do xml) me avise e te ajudo no form.
      Abraços e obrigado pela visita.

      • Vasco fevereiro 20, 2011 às 12:32 pm

        Olá Rafael,
        Se puder dar-me uma ajuda na construção do form, agradeço.
        A minha dificuldade está nas propriedades do formulário de pesquisa e o respectivo código para retornar o registo específico do ficheiro XML.
        Mais uma vez obrigado.

      • Rafael Clares fevereiro 20, 2011 às 8:04 pm

        Vasco, me envia o seu formulário atual por email para eu ver. (rafadinix@gmail) Ah, não mande dúvidas por email, apenas o arquivo, as dúvidas continue postando no blog, não respondo email com assuntos do blog.

    • Daniel setembro 8, 2011 às 6:38 pm

      Olá. Em primeiro lugar quero parabenizar o Rafael por este blog que tem ajudado muitos iniciantes em PHP, simplesmente uma “mão na roda”.
      Bom, estou com problema para ler um XML através do PHP pois meu sistema faz uma comparaçõ com o que está dentro da tag e se for igual com a informação vinda do banco de dados ele captura os dados e grava no bd. Ocorre que na tag tem um espaço em branco antes do nome da cidade e meu sistema entende como um caracter a mais. Exemplo: São Paulo então se no banco de dados está São Paulo sem o espaço em branco antes e desonsidera a informação e não captura os dados daquele XML. Já tentei trim, rtrim e ltrim e não consegui. Se puderem me ajudar aghradeço de coração. Obrigado, Daniel.

      • Rafael Clares setembro 8, 2011 às 6:44 pm

        Daniel, ao invés trim ou rtrim crie essa function abaixo e a utilize:

        function fulltrim($str)
        {
        return preg_replace(‘/\s+/’,”,$str)
        }

        Abs

  28. Saulo abril 18, 2011 às 10:17 pm

    Pessoal, preciso de um código que leia vários arquivos xml, tipo: arquivo1.xml, arquivo2.xm… arquivo 100.xml.
    Depois de ler inserir no banco de dados SQL Server.
    Desde já agradeço demais a atenção de vocês.

    Grato,

    Saulo.

    • Rafael Clares abril 25, 2011 às 7:26 am

      E ae Saulo, beleza?
      cara, é um código não muito simples… você já tem algo aí, um começo?
      até logo,
      abs

  29. Gisele abril 28, 2011 às 8:44 pm

    OIE Rafael?

    Para Fazer Conexao COm O banco nesse exemplo que vc passou?

    http://clares.wordpress.com/2008/08/17/ler-xml-com-php/

    Armazenar esses Valores do livro em banco de dados!
    è possivel?

    Obrigado

    • Rafael Clares abril 29, 2011 às 7:29 am

      Oie Gisele, mandei no seu email.
      até logo,

      Outros interessados no script: download

      • AndreLC agosto 9, 2011 às 3:49 pm

        Oie Rafael,

        Aproveitando o script que mandou para a Gisele, como fazer aí para que, por exemplo, se não houvesse a tag cod mas se fosse atributo do titulo, como fazer para extrair o atributo neste exemplo de banco de dados?

        Obrigado.

        vlw

      • Rafael Clares agosto 11, 2011 às 3:04 am

        André, você precisa utilizar uma função do tipo xml2array, faça uma busca no google, é simples de usar.
        se preferir, dê uma olhada nessa classe, ela extrai atributos do xml

        http://www.phpclasses.org/package/2474-PHP-Parse-an-XML-document-into-an-array-XPATH-indexed.html

  30. AndreLC agosto 9, 2011 às 3:52 pm

    Oie,

    Outra dúvida minha… Se o livro estiver em várias categorias e eu quiser colocar ele em mais que uma categoria possuindo cod iguais, como fazer aí brother?

    É que pelo que teste ele se tiver 2 cod iguais, substitui e eu não queria não.

    Obrigado.

    Abraço aí

    • Rafael Clares agosto 11, 2011 às 2:56 am

      Poxa André, 2 códigos iguais não rola mesmo, uma vez que este seria a chave primária e deve ser único.
      Neste caso o que você pode fazer é listar por categorias, assim o item que existe em mais de uma categoria seria listado também.
      Mesmo assim, o ideal é criar a estrtura do xml com nós cara categoria, ex:
      categoria
      cod_categoria
      livro
      cod_livro
      livro
      categoria

  31. Carlos Cesar Nardo Junior agosto 10, 2011 às 1:29 pm

    Salve parcerinho Rafael, blz?

    então, eu to fazendo um sistema em flash + XML de notícias. até aí tudo bem, se não fosse pelo fato que o flash, por medidas de segurança, não lê arquivos XML hospedados em outro servidor.

    a saida que eu encontrei é pegar os nós do xml e armazenar em variaveis no php, depois eu pegar essas variaveis e exibir no flash.

    eu pegar as variaveis do php e exibir no flash é tranquilo, o meu problema ta sendo transformar os nós do xml em variaveis do php

    tem uma luz pra me ajudar man?

    abraços!

  32. Felipe agosto 12, 2011 às 12:54 pm

    fala Rafael. muito bom esse tutorial. sempre acompanho os artigos. sempre muito boms.
    gostaria de saber o seguinte. e se no xml tiver traço. por exemplo o nome do nó do meu XML eh e la nas variaveis eu coloco foreach($xml->livro-semcapa as $livro-semcapa)

    nao funciona pra min dessa maneira. acho que eh por causa do traço. oque fazer neste caso?

    • Rafael Clares agosto 20, 2011 às 2:21 am

      rsrs rs rapaz você está subtraindo as vars, é o mesmo que fazer 5-4 … utilize vars com underline se precisar.
      abs

      • Felipe agosto 22, 2011 às 10:40 am

        usei assim e funcionou. foreach($xml->{‘livro-semcapa’} as ${‘livro-semcapa’})

        fcia a dica pra galera.

  33. rosa setembro 20, 2011 às 2:47 pm

    to com um problema q pra vcs pode parecer mto simples, mas pra mim ta sendo algo mto complexo tipo to fazendo um trabalho com XML qro salvar o conteudo das tags em um arquivo html eu fiz da seguinte maneira :

    <?php
    $xml = simplexml_load_file("31110907783016000167550020000218941002243019-nfe.xml");
    echo <<<EOD

    NFe

    EOD;

    $natOP = $xml->ide->natOp;
    $xNome = $xml->ide->xNome;

    echo $natOP;
    echo $xNome;

    Mas ñ funcionou axo q o problema esta no local onde ta armazenado o XML ñ tenho um servidor e esses arquivos são de NFe salvei na pasta www e ñ deu certo onde posso salvar?coloquei o caminho relativo pq o codigo e o xml estão na mesma pasta(www) o q posso fazer?

    • Rafael Clares setembro 22, 2011 às 7:53 pm

      Remova o echo <<<EOD e utilize echo "NFe"; apenas.

  34. rosa setembro 22, 2011 às 11:44 am

    gente alguém pode me responder o pq q meu codigo ñ esta funcionando?<?php
    $xml = simplexml_load_file("notafiscal.xml");
    echo <<<EOD

    NFe

    EOD;

    $IE = $xml->emit->IE;
    $xNome = $xml->emit->xNome;
    $CNPJ1 = $xml->emit->CNPJ;

    $natOP = $xml->ide->natOp;
    $xFant= $xml->ide->xFant;
    $dEmi = $xml->ide->dEmi;

    $nProt = $xml->infProt->nProt;

    $xNome = $xml->dest->xNome;
    $CNPJ = $xml->dest->CNPJ;
    $xLgr= $xml->dest->xLgr;
    $xBairro = $xml->dest->xBairro;
    $CEP = $xml->dest->CEP;
    $xMun = $xml->dest->xMun;
    $fone = $xml->dest->fone;
    $UF = $xml->dest->UF;
    $IE2 = $xml->dest->IE;

    $xNometrans =$xml->transporta;
    $CNPJtrans =$xml->transporta;

    echo $natOP;
    echo “nome é:$xNome”;
    echo “”;

    ?>

    • Rafael Clares setembro 22, 2011 às 7:52 pm

      O ideal é postar também a mensagem de erro. mas de qualquer forma eu arrisco que é devido ao echo <<<EOD , acho que não há necessidade de utilizad <<< para printar uma única palavra, no geral, utiliza-se para string longa.

      • Rosa setembro 29, 2011 às 12:21 pm

        aconteceu isso pq qndo mandei ñ foi mostrado o codigo html q tava dentro do EOD, esses dias pesquisando e fazendo testes conclui q o erro tá no xml, pq fiz um xml e usei o mesmo codigo e funcionou…quando no xml aparece assim:(na verdade tirei os < pq se colocar ñ vai aparecer na tela, mas no codigo ta normal!)
        nfeProc xmlns="http://www.portalfiscal.inf.br/nfe&quot; versao="2.00"
        – NFe xmlns="http://www.portalfiscal.inf.br/nfe&quot;
        – infNFe Id="NFe31110907783016000167550020000217651005934252" versao="2.00"
        axo q essas informações ñ conseguem ser lidas pq estas estao sendo mandadas p/ um outro lugar, percebi q assim q tirei isso e reorganizei o codigo funcionou logo esse deve ser meu foco esse erro pq ñ posso ficar configurando assim q o xml ate pq qro q tudo isso seja de forma automatica, ñ posso ficar configurando cada vez q xegar um novo xml, e agora o q fazer?alguem pode me ajudar?Brigada.

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

        Disponibilize o código para download e me avise. até mais

  35. rosa setembro 27, 2011 às 11:55 am

    considere o codigo assim:
    emit->IE ;
    $xNome = $xml->emit->xNome;
    $CNPJ1 = $xml->emit->CNPJ;
    $natOP = $xml->ide->natOp;
    $xFant= $xml->ide->xFant;
    $dEmi = $xml->ide->dEmi;

    $nProt = $xml->infProt->nProt;

    $xNome = $xml->dest->xNome;
    $CNPJ = $xml->dest->CNPJ;
    $xLgr= $xml->dest->xLgr;
    $xBairro = $xml->dest->xBairro;
    $CEP = $xml->dest->CEP;
    $xMun = $xml->dest->xMun;
    $fone = $xml->dest->fone;
    $UF = $xml->dest->UF;
    $IE2 = $xml->dest->IE;

    $xNometrans =$xml->transporta;
    $CNPJtrans =$xml->transporta;
    echo $IE;
    echo $xNome ;
    echo $CNPJ1 ;

    echo $natOP;
    echo $xFant;
    echo $dEmi ;

    echo $nProt;

    echo $xNome;
    echo $CNPJ;
    echo $xLgr;
    echo $xBairro;
    echo $CEP;
    echo $xMun;
    echo $fone;
    echo $UF;
    echo $IE2;

    echo $xNometrans;
    echo $CNPJtrans ;

    ?>

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

      Rosa, está muito difícil de entender o código. Tente copiar e colar em um arquivo com extensão txt e hospedar em algum lugar, feito isso me passe o link, ou até mesmo link para download. Até logo,

      • Rosa outubro 10, 2011 às 12:54 pm

        ah akela parte ja deu certo brigada pela ajuda, só q agora tenho uma duvida é possivel atraves do php contar a quantidade de tags xml por exemplo tenho assim
        (pessoa) Rosa(/pessoa)
        (pessoa)Rafael(/pessoa)
        há alguma forma de contar qntas tags tenho com mesmo nome?

      • Rafael Clares outubro 17, 2011 às 1:51 am

        Rosa, tem sim, leia a doc abaixo:

        http://www.php.net/manual/pt_BR/simplexmlelement.count.php

        é exatamente o que você precisa fazer!
        boa sorte!

  36. Daniel Lemes outubro 9, 2011 às 2:01 am

    Esse artigo salvou muito do meu tempo, muito obrigado!
    Você devia abrir um pool de doações no blog, certamente algumas pessoas gostariam de retribuir o excelente serviço prestado de graça.

    • Rafael Clares outubro 17, 2011 às 1:39 am

      hehehehehe orra Daniel, a idéia não é ruim não viu rs rs você insentivar aí a galera fazendo a primeira doação hehehe
      forte abraço, valeu!

  37. Daniel Lemes outubro 9, 2011 às 2:51 am

    E só fiquei com uma pequena (não sei se é tão pequena) dúvida: digamos que esse mesmo xml tem 5000 registros de livros. Tem como exibir apenas os cinco primeiros resultados, por exemplo?

    • Rafael Clares outubro 17, 2011 às 1:45 am

      Daniel, os dados retornam em um objeto mas você pode passar para um array se preferir, nos 2 casos você pode utilizar contadores.
      Na sua pergunta em si, você pode exibir apenas os 5 primeiros fazendo assim:
      $count = 0;
      foreach($xml->livro as $livro)
      {
      if($count cod;
      #usando o utf8_decode para exibir com acentos
      echo utf8_decode($livro->titulo);
      echo utf8_decode($livro->autor);
      echo utf8_decode($livro->descricao);
      echo $livro->preco;
      echo “
      ”;
      }
      $count++;
      }

      abs

  38. Rosa outubro 21, 2011 às 12:18 pm

    ah muito obrigada!valeu mesmo oh lol consegui contar a quantidade de tags, porém, ainda tenho uma duvida(desculpa é pq tô começando agora a programar, esse é meu primeiro projeto ai ñ sei mto) é pq preciso ler uma tag com um atributo especifico ex: (produto nItem=”1″)(/produto)…(produto nItem=”3″)(/produto) há alguma forma de pegar só a tag com o atributo nItem=”3″?

    • Rafael Clares outubro 29, 2011 às 8:01 pm

      Rosa, não tenho como desenvolver toda a aplicação, talvez seja interessante você ler um pouco a referência deixada ao fim do post!

  39. marcelocrico outubro 30, 2011 às 3:37 pm

    Olá amigo, parabens pelo Blog.

    Estou com uma duvida…

    Copiei o código xml proposto e salvei com livros.xml

    01
    PHP para iniciantes
    Desenvolvendo Aplicações web
    Manuel da Silva
    200
    5.00

    02
    XML
    Usando XML com PHP
    José das Couves
    100
    15.00

    Entao criei o php as.php

    Untitled Document

    livro as $livro)
    {
    echo $livro->cod;
    #usando o utf8_decode para exibir com acentos
    echo utf8_decode($livro->titulo);
    echo utf8_decode($livro->autor);
    echo utf8_decode($livro->descricao);
    echo $livro->preco;
    echo “”;
    }

    print_r($xml);
    ?>

    Quando acesso o arquivo as.php a página vem em branco, poderia me ajudar?

    • Rafael Clares novembro 9, 2011 às 4:04 pm

      MArcelo, verifique se ao copiar as aspas não foram trocadas por apóstrofos, geralmente isso ocorre ao copiar o código e gera erro!

  40. Flavio novembro 22, 2011 às 8:39 pm

    Mto bom isso!

    Mas uma dúvida, pq vc usou o utf8_decode? Nao é só setar o xml como UTF-8?

    Abraços

    • Rafael Clares novembro 23, 2011 às 1:38 pm

      Flávio, você não é o primeiro que faz essa pergunta e também não foi o primeiro a testar o que se propoem.
      Veja, para que o XML esteja com encoding UTF-8 eu teria que escreve seu conteúdo em UTF-8 e eu não consigo fazer isso.
      Neste exemplo temos:
      José das Couves
      Isso não é UTF-8, é iso-8859-1 !

      UTF-8 seria assim:
      José das Couves

      Eu não consigo escrever em UTF-8 rs rs rs
      Se eu alterar o encoding do XML para UTF-8 e escrever algo do tipo “José” haverá um erro na devido a letra “é” já que esta não é utf-8.

      O que eu poderia fazer para evitar o uso do utf8_decode() seria definir o header do PHP como abaixo:
      @header(‘Content-Type: text/html; charset=utf-8′);

      Tanto é que irei alterar o post, de toda forma, acho muito bacana que pessoas e outros que fizeram a pergunta tenham interagido uma vez que sou apenas um iniciante e isso me faz repensar os métodos em que as coisas foram feitas.
      Fico muito agradecido pelo seu comentário e claro, gostaria que você testasse essa questão que levantou,
      1º – retirar o utf8_decode e testar
      2º – alterar o encoding do XML para UTF-8 e testar (neste verá que ocorerrá um erro ao tentar ler os acentos)

      Forte abraço,

  41. Rodolfo dezembro 6, 2011 às 5:26 pm

    Muito obrigado irmao, me ajudou MUITOOO!!!!

    bom demais!

  42. [...] Caso o problema não é apresentado nesse trecho, tente ler linha a linha do xml utilizando esse exemplo. Like this:LikeBe the first to like this post. Filed under: #ficaAdica, Código, How To Do, PHP, [...]

  43. Gustavo Voll dezembro 14, 2011 às 7:25 pm

    Fala Rafael, blz?

    Gostei muito das dicas que vc dá, e sobre o proprio post. Estou precisando popular um combobox de um form com dados de um XML mais simples que esse aí que vc usa no exemplo. A minha dúvida é se esse seu código funciona para o WordPress. Não estou achando em lugar nenhum nada falando sobre isso para WordPress.

    //Abs

    • Rafael Clares dezembro 14, 2011 às 7:27 pm

      Gustavo, funciona sim, o wordpress é feito em PHP, logo, qualquer código em PHP funcionará no wordpress desde que você saiba onde inserir o código! Abs

      • Gustavo Voll dezembro 14, 2011 às 7:35 pm

        Rafael, criei um template (teste.php), copia do page.php só que com esse código. Achei que deveria funcionar também, mas não retorna nada. :/

      • Rafael Clares janeiro 5, 2012 às 2:16 am

        Gustavo, coloque a linha abaixo no início do script para tentar exibir alguma mensagem de erro.
        error_reporting( E_ALL );

        Obs: desculpe a demora em responder, estive de mudança e fiquei sem net.

  44. ygor dezembro 19, 2011 às 3:10 pm

    como eu faço para ler esse xml agredeço des de ja

    ?xml version=”1.0″ encoding=”ISO-8859-1″ ?>

    001
    Super Comprável em: Caprichado sanduíche “Super Beirute” para até 3 pessoas + Coca-cola de 2L. No Nilo Esfihas com 59% OFF, de R$ 27,00 por apenas R$ 10,90. Delícia no sabor e no preço!

    27,00
    10,90
    59
    2011-12-02 20:25:00
    ofertas
    Compravel

    Rua Pereira Filgueiras, 1931 loja K – Aldeota. Fortaleza, CE
    http://www.compravel.com.br/#!/oferta/id/50
    fortaleza

    • Rafael Clares janeiro 5, 2012 às 2:15 am

      Poxa Igor, é conforme está no post mesmo, acontece que você precisa me dizer qual sua dificuldade. Me desculpe a demora em responder, estive de mudança e fiquei sem internet. abs

  45. Marcos Martins janeiro 11, 2012 às 4:14 pm

    Olá Rafael,

    Amigo, estou tentando usar um código PHP para ler esse arquivo XML dos produtos do CorpoPerfeito =>> Exemplo:

    http://www.parceriaperfeita.com.br/vitrine.xml?anunciante=1&Quantidade=10

    Estou tentando aplicar o mesmo método, mas como existem muitos registros de campos, estou meio perdido por onde começar. Pode me dar um exemplo?

    Fiz esse exemplo simples: Mas ele não consegue ler, acredito que os campos não estão corretos.

    SubProduto as $SubProduto)
    {
    echo $SubProduto->Id;
    #usando o utf8_decode para exibir com acentos
    echo “Nome Produto: ” .$SubProduto->Nome. “”;
    echo “Valor: ” .$SubProduto->PrecoPor. “”;
    echo “”;
    }
    ?>

    —–
    Preciso de ajuda, obrigado!

    • Rafael Clares janeiro 11, 2012 às 4:26 pm

      Olá Marcos, o ideal é você informar a mensagem de erro que ocorre, assim fica mais fácil te ajudar!
      Post o erro para eu ver o que há errado!
      Abs

  46. akismet-4e545316a318a2363e1b0acb2c3b89bb janeiro 18, 2012 às 12:10 pm

    Simples e prático! Já ajudou! Forte abraço.

  47. Ricardo janeiro 27, 2012 às 1:14 pm

    #inicio#
    #GET nItem=”1″#
    #posicao#
    #nome#alcantara#/nome#
    #coluna#100#/coluna#
    #inha#200#/linha#
    #/posicao#
    #/GET#
    #GET nItem=”2″#
    #posicao#
    #nome#willian#/nome#
    #coluna#300#/coluna#
    #linha#400#/linha#
    #/posicao#
    #/GET#
    #/inicio#’

    substitui as por # pois seu blog bloqueia… =]

    Opa rafael tudo bem? estou com dificuldades para criar um array deste xml…

    eu gostaria de criar um array da seguinte forma..

    array['GET']['1']['posicao']['nome'] = alcantara

    obs:onde ‘['1']‘ é o valor do attributo ‘nItem’

    array['GET']['2']['posicao']['nome'] = willian

    obs:onde ‘['2']‘ é o valor do attributo ‘nItem’

    estou tentando dessa forma.. mas sem sucesso…

    foreach ($myxml as $tag)
    {
    $eRet[$tag->getName()][$myxml->GET->attributes()] = $tag;

    }

    pode dar uma ajuda ai? obrigado!!!

    • Rafael Clares janeiro 27, 2012 às 9:04 pm

      Rapaz, segue o código:

      $xml = simplexml_load_file(“test.xml”);
      $json = json_encode($xml);
      $array = json_decode($json,TRUE);
      print_r($array);

      Boa sorte!

      • Ricardo janeiro 30, 2012 às 11:32 am

        Opa, tudo bem? Obrigado pela resposta…

        mas o retorno dessa a função é o mesmo que o da função acima….

        foreach ($myxml as $tag)
        {
        $eRet[$tag->getName()] = $tag;

        }

        return(print_r($eRet));

  48. Anderson janeiro 27, 2012 às 7:17 pm

    não consegui fazer funcionar…

    • Rafael Clares janeiro 27, 2012 às 8:52 pm

      Anderson, ficou muito genérico isso rs rs
      Quer tentar dizer se deu alguma mensagem de erro, se apareceu algo na tela, se alterou algo, etc… ?
      No aguardo,

  49. patrick fevereiro 15, 2012 às 3:43 pm

    Rafael para ler arquivos soap asmx(webservice) como do exemplo
    “http://wsi1.unitfour.com.br/intouchws.asmx?op=LocalizaPessoas”
    que procedimento devo fazer.

    • Rafael Clares abril 3, 2012 às 8:06 pm

      Patrick, esse tipo de XML é gerado para descrever um serviço de webservice, a ideia é chamar um dos serviços descritos e não ler o XML, mesmo porque a grosso modo,
      é um XML para cada serviço nesse exemplo que você mandou e não dá para simplesmente ler e obter algum resultado. Você precisa chamar o serviço, procure no google por “NuSoap PHP”;
      Abraços e desculpe a demora em responder, eu passei batido da sua pergunta e não vi…

  50. fabio fevereiro 26, 2012 às 10:00 pm

    Obrigado, foi muito util

  51. Eduardo março 26, 2012 às 9:04 pm

    Olá rafael, gostaria que você ou alguém do blog me auxiliasse na medida do possível, estou começando a mexer com webservice e não estou conseguindo gerar uma resposta de xml válida. O Server é de um cliente, preciso apenas arrumar um jeito de ler as informações…

    http://opmanager.fabricadesoftware.net.br/WebService/opManager.asmx?wsdl

    alguém pode me ajudar com isso ?

  52. Gilbert Eterovisk maio 18, 2012 às 4:41 am

    Cara ….muito bom… Ajudou demais! Obrigado!

  53. Fernando Melo maio 27, 2012 às 7:53 pm

    Olá tem como fazer o download do arquivo xml ao invés dele ser exibido(compilado) no navegador?

    • Rafael Clares maio 28, 2012 às 9:15 pm

      Fernando, dá sim, mas dê uma procurada no blog pelos demais artigos sobre XML que você irá encontrar uma opção legal!
      Abs

  54. Victor Dias julho 9, 2012 às 1:27 am

    Olá..

    Estou com dificuldade pois nao entendo do assunto e é a primeira vez que tenho de fazer isto.. tenho um ficheiro XML e preciso mostrar o conteudo no site.. como fazer ??.. me puderem ajudar…. o XML tem este conteudo..

    R… B…
    geral@…….com

    http://…….com

    public_html/namemusica//current_animator.png

    Obrigado

    • Rafael Clares julho 16, 2012 às 7:31 pm

      Victor, cara o comentário ficou meio bagunçado, tenta enviar novamente ok;

  55. mizifih julho 10, 2012 às 5:50 pm

    O que estou fazendo de errado?

    Arquivo XML: http://pastebin.com/wdZnwHYg
    Arquivo PHP: http://pastebin.com/N5pHQBey

  56. Fabiano agosto 15, 2012 às 1:45 pm

    Bom dia Rafael, muito bom seu artigo parabéns, estou iniciando com o xml e gostaria de buscar as cotações desse site http://economia.uol.com.br/cotacoes/xml/cotacoesmidia.jhtm só ele esta um pouco diferente de seu exemplo poderia me ajudar?

  57. Adriano outubro 21, 2012 às 1:37 am
    • Rafael Clares outubro 24, 2012 às 6:59 pm

      Fala Adriano, segue:

      @header(“Content-Type: text/html; charset=utf-8″);
      $xml = simplexml_load_file(“http://cep.republicavirtual.com.br/web_cep.php?cep=91010000&formato=xml”);
      echo “$xml->uf – $xml->cidade – $xml->bairro – $xml->logradouro”;

      • Adriano outubro 31, 2012 às 11:49 pm

        Obrigado… valeu.

  58. Marcelo outubro 25, 2012 às 1:43 am

    Rafael, havia uma pergunta aqui sobre o xml do parceria perfeita: “Http://beta.parceriaperfeita.com.br/vitrine.xml?anunciante=1&ordenacao=menorpreco&quantidade=10&direcaoordenacao=asc&palavraschave=camisa”, mas não consegui acompanhar o desenrolar da pergunta. Tem como vc dar uma ajuda? Não sou programador, mas queria colocar a vitrine xml no meu site. Obrigado.

    • Rafael Clares outubro 26, 2012 às 1:10 pm

      Marcelo, não consegui ver seu link, daí ficou ruim de ajudar… parece não existir;

Os comentários estão desativados.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 139 outros seguidores

%d blogueiros gostam disto: