Ler XML com PHP
Veremos como ler um arquivo XML utilizando o método SimpleXML no PHP5, depois que escrevi como criar um arquivo XML com PHP nada mais interessante que saber como ler o arquivo.
Começaremos criando um arquivo XML bem simples, escreva o código abaixo e salve como:
livros.xml
<?xml version=”1.0″ encoding=”iso-8859-1″?>
<livros>
<livro>
<cod>01</cod>
<titulo>PHP para iniciantes</titulo>
<descricao>Desenvolvendo Aplicações web</descricao>
<autor>Manuel da Silva</autor>
<paginas>200</paginas>
<preco>5.00</preco>
</livro>
<livro>
<cod>02</cod>
<titulo>XML</titulo>
<descricao>Usando XML com PHP </descricao>
<autor>José das Couves</autor>
<paginas>100</paginas>
<preco>15.00</preco>
</livro>
</livros>
Agora que já temos o XML vamos criar o arquivo PHP, salve-o com o nome que quiser.
index.php
<?
#define o encoding do cabeçalho para utf-8
@header(‘Content-Type: text/html; charset=utf-8’);
#carrega o arquivo XML e retornando um Objeto
$xml = simplexml_load_file(“livros.xml”);
# se o xml for um link e nao um arquivo como livros.xml, troque -o pelo link ex.
# $xml = simplexml_load_file(“http://endereco/link/mesmoQueNaoTenhaExtensaoXML/“);
#para cada nó LIVRO atribui à variavel $livro (obj simplexml)
foreach($xml->livro as $livro)
{
echo $livro->cod;
#usando o utf8_decode para exibir com acentos
echo $livro->titulo;
echo $livro->autor;
echo $livro->descricao;
echo $livro->preco;
echo “<br>”;
}
?>
Muito simples! O nome do método não é em vão! 😉
Bem, agora basta você formatar a saida dos dados, utilize tags html formatadas com CSS, um exemplo pode ser como abaixo:
echo “<p><b>Título:</b> ” .$livro->titulo . “</p>”;
Como está no comentário no código, a função simplexml_load_file carrega um arquivo XML retornando seu conteúdo em um Objeto, se quiser ver o detalhes do objeto criado pela função e atribuído à variável $xml, utilize a função do PHP print_r . O resultado será como mostrado abaixo:
O comando print_r($xml) resultará em:
SimpleXMLElement Object ( [livro] => Array ( [0] => SimpleXMLElement Object ( [cod] => 01 [titulo] => PHP para iniciantes [descricao] => Desenvolvendo Aplicações web [autor] => Manuel da Silva [paginas] => 200 [preco] => 5.00 ) [1] => SimpleXMLElement Object ( [cod] => 02 [titulo] => XML [descricao] => Usando XML com PHP [autor] => José das Couves [paginas] => 100 [preco] => 15.00 ) [2] => SimpleXMLElement Object ( [cod] => 03 [titulo] => Javascript [descricao] => O Poder do javascript [autor] => Billy Borny [paginas] => 80 [preco] => 9.90 ) ) )
Links:
Documentação do SimpleXML: SimpleXML
Abraços e até o próximo post. 😉
Valeu a dica e o como fazer um xml… gostei
Parabéns pelo código rapaz.
Muito útil para quem está começando.
Me serviu bem.
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
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!
Cara,valeu demais,tava procurando por isso !
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!
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
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 ([email protected]).
flw
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!
Very nice!!!
simple_xml always!
thanks
Excelente explicação! Será muito útil pra mim!
Muito obrigado!
Vlw pakas! ajudou bastante! era o que eu estava precisando. =D
Parabéns… excelente artigo!!
.
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!
Massa… paragens pelo blog…
Nossa, mandou muito bem na explicação! Clara e sucinta, a melhor que eu já vi! Parabéns e sucesso!
Abraço.
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
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
Olá Thiago, poxa cara precisa passar mais detalhes sobre o programa.
Passa aí seu msn.
abraços
Ai fica mais mole que sopa de minhoca ! ! !
Obrigado ai Rafael!!!!
Muito útil, valeu irmão.
vlw irmao, tava precisando hehehe
Show de Bola!!! Ta tirando a galera do sufoco!
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.
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.
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.
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
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.
Tá firmeza man. Fique à vontade, se eu puder ajudar então beleza.
Desculpe ae tbm ok 🙁
abraços
[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]
Agora foi! substituí o “” por “[]”. 🙂
Pode apagar os outros. Foi mal! 🙁
show. melhor dica q achei =)
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
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.
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.
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.
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.
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.
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.
Daniel, ao invés trim ou rtrim crie essa function abaixo e a utilize:
function fulltrim($str)
{
return preg_replace(‘/s+/’,”,$str)
}
Abs
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.
E ae Saulo, beleza?
cara, é um código não muito simples… você já tem algo aí, um começo?
até logo,
abs
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
Oie Gisele, mandei no seu email.
até logo,
Outros interessados no script: download
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
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
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í
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
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!
Carlos, faça uma busca rápida no google pelo termo XML2Array que é a solução para seu problem!
Abraços
Ah essa classe é bacana
http://www.phpclasses.org/package/2474-PHP-Parse-an-XML-document-into-an-array-XPATH-indexed.html
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?
rsrs rs rapaz você está subtraindo as vars, é o mesmo que fazer 5-4 … utilize vars com underline se precisar.
abs
usei assim e funcionou. foreach($xml->{‘livro-semcapa’} as ${‘livro-semcapa’})
fcia a dica pra galera.
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?
Remova o echo <<<EOD e utilize echo "NFe"; apenas.
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 “”;
?>
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.
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" versao="2.00"
– NFe xmlns="http://www.portalfiscal.inf.br/nfe"
– 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.
Disponibilize o código para download e me avise. até mais
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 ;
?>
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,
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?
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!
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.
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!
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?
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
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″?
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!
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?
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!
Mto bom isso!
Mas uma dúvida, pq vc usou o utf8_decode? Nao é só setar o xml como UTF-8?
Abraços
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,
Muito obrigado irmao, me ajudou MUITOOO!!!!
bom demais!
Pingback: Problemas com o XML do WordPress « Thais Mizuno
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
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
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. :/
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.
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!
http://www.realdescontos.com.br/img_ofertas/e830c8c9f5764abc77f02ee5dbd12d8590bf164e.jpg.pagespeed.ce.369YhRIh9r.jpg
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
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
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!
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
Simples e prático! Já ajudou! Forte abraço.
#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!!!
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!
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));
não consegui fazer funcionar…
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,
Rafael para ler arquivos soap asmx(webservice) como do exemplo
“http://wsi1.unitfour.com.br/intouchws.asmx?op=LocalizaPessoas”
que procedimento devo fazer.
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…
Obrigado, foi muito util
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 ?
Cara ….muito bom… Ajudou demais! Obrigado!
Olá tem como fazer o download do arquivo xml ao invés dele ser exibido(compilado) no navegador?
Fernando, dá sim, mas dê uma procurada no blog pelos demais artigos sobre XML que você irá encontrar uma opção legal!
Abs
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
Victor, cara o comentário ficou meio bagunçado, tenta enviar novamente ok;
O que estou fazendo de errado?
Arquivo XML: http://pastebin.com/wdZnwHYg
Arquivo PHP: http://pastebin.com/N5pHQBey
Que mensagem aparece ao executar o script ?
Não aparece nenhuma mensagem de erro, a página aparece em branco, ou então os echos que eu forço para debug fora do loop que busca as informações do XML.
Marcio, precisaria ver o código para entender o que ocorre de errado!
Arquivo XML: http://pastebin.com/wdZnwHYg
Arquivo PHP: http://pastebin.com/N5pHQBey
PHP http://pastebin.com/Bw9GF5pM
XML http://pastebin.com/ZFr8RutR
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?
Fala Fabiano, desculpa a demora aí irmão, tá corrido aqui!
Então, o post que você precisa ler é outro, veja:
http://clares.wordpress.com/2012/01/27/ler-atributos-xml-extendendo-a-classe-simplexmlelement/
ou
http://clares.wordpress.com/2012/01/27/ler-atributos-xml-com-php/
Sucesso aê!
Não consigo ler este xml, http://cep.republicavirtual.com.br/web_cep.php?cep=91010000&formato=xml alguem consegue?
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”;
Obrigado… valeu.
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.
Marcelo, não consegui ver seu link, daí ficou ruim de ajudar… parece não existir;
no comentário acima não foi a XML.. tentarei retratar de uma forma aceitável ao fórum…
nfeProc xmlns=”http://www.portalfiscal.inf.br/nfe” versao=”2.00″
NFe xmlns=”http://www.portalfiscal.inf.br/nfe”
infNFe Id=”NFe123″ versao=”2.00″
ide
Preciso capturar o que está aqui…
/ide
/infNFE
/NFE
Grato,
Felipe, posta lá no pastebin.com o seu código e me passa o link aqui. Abs
Gostei bastante! Valeu
Fala Rafael!
Me diz uma coisa. Estou tentando ler alguns nós de um feed, porém, alguns deles tem “:” no nome do nó. Por exemplo:
Como o SimpleXML gera isso?
Já encontrei! haha
Cara, como faço pra ler o XML de forma invertida? Tentei usar o “array_reverse” em tudo o que é lugar no fonte de exemplo que você postou e não consegui. Em alguns não retornava resultado, em outros não lia invertido. Agradeço se puder ajudar.
Desculpe a demora em responder, estive ausente por algum tempo. Eu não entendi bem o que deseja fazer, talvez seja legal colocar o código no pastebin para eu tentar entender o que deseja;
Quero fazer a leitura do XML em ordem decrescente, do último item para o primeiro mas não consigo, mesmo usando “array_reverse”, que foi a explicação mais comum que encontrei na internet. Se puder ajudar, agradeço. E obrigado por responder.
Coloca seu código lá no pastebin para eu ver como está!
Olá boa noite, como poderia acontecer, estou usando ler o xml em php vindo de uma API de Streaming onde mostra o nº de ouvintes , nome da música etc…
Usei o script em um site e funciona perfeitamente , usei o mesmo script em outro site e não faz a leitura, e ambos os sites estão no mesmo servidor com as mesmas configurações então o que poderia ser ? Já conferi e está correto mas não faz a leitura.
Adriano, confira se há algum php.ini em um dos sites e certifique-se de ter habilitado no php.ini o fopen_url.
Realmente Rafael , obrigado era isso mesmo e eu não percebi. rsrs obrigado valew!
Olá!
Parabéns pelo blog!
Sou um noob em PHP ainda, mas eu queria só corrigir um detalhe:
Onde diz:
“#carrega o arquivo XML e retornando um Array
$xml = simplexml_load_file(“livros.xml”);”
Na verdade, a função retorna um OBJETO e não um ARRAY.
Estou certo?
Abraço!
É sim, Noel, está errado o comentário do código. Obrigado
Quando escrevi isso, em 2012, eu era tão noob quanto você, na verdade era mais, já que você prestou atenção nisso e eu não.
Abs
desculpe, aqui esta o codigo php:
http://pastebin.com/0wfivYVn
Obrigado
Olá Rafael, como eu posso executar esse XML (http://www.uruacufm.com.br/tocandoagora/ArquivoWEB.XML) em php? já tentei várias formas e não obitive êxito. Se puder Ajudar.
By Jonas Felipe
Como faço para o SimpleXML ler meu arquivo, achar a palavra que quero e contar quantas vezes ela aparece no arquivo??
boa tarde, se o xml estiver com caractere especial, teria como reverter em php?