Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fmda

ler varios xml e imprimir em tela

Recommended Posts

Acho que eu sei onde está meu erro. O foreach tá executando a instrução pra cada elemento.

 

Vou alterando aqui. De toda forma, vc não quer me passar a URL desses XMLs para eu testar antes de te enviar o código?

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu to fazendo num servidorzinho da minha maquina, mas o xml de teste que estou usando é este

parece que eu certo passando o pos++ pra dentro, tinha dado erro porque tinha lixo

 

 

<Data>

<Id>1</Gamertag>

<Nome>Nome</Nome>

<Sobrenome>Sobrenome</Sobrenome>

</Data>

 

E quando nao tem os dados é

 

 

 

<Data>

<Error>Sem dados</Error>

<Status>falhou</Status>

</Data>


eu estou fazendo algumas modificações, melhorias

e jogando direto pro banco, ao invez de jogar no arquivo. para caso precisse

 

basta trocar o fwrite por esta linha, num é?

 

mysql_query("INSERT INTO tabela (id, nome, sobrenome) VALUES ('$gravar->Id', '$gravar->Nome', '$gravar->Sobrenome'");



sim, estou alimentando para o banco agora

vamos ver no final se tudo vai dar certo, mandei ler varios xml

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, antes do <data> vc tem outro parâmetro, certo? O <response>, isso?



Amigo, vamos lá.

 

Desta vez eu montei arquivos e testei:

 

<?php
#set_time_limit(3600); //1 hora pra dar timeout
$pos = 0;

if (!empty($_GET['pos'])) {
	$pos = $_GET['pos'];
}

$xmls = array(
	'http://localhost/test/xmls/xml1.xml',
	'http://localhost/test/xmls/xml2.xml',
	'http://localhost/test/xmls/xml3.xml',
	'http://localhost/test/xmls/xml4.xml'
);

$total_pos = count($xmls);
$xmldata = simplexml_load_file($xmls[$pos]);

if (!empty($xmldata->Data->ID)) { //verifica se o valor existe
	foreach ($xmldata->Data as $gravar) {    
		$fp = fopen("bloco.txt", "a"); //passei o fopen e fclose pra dentro do loop pra não abrir o arquivo se não for gravar
		$escreve = fwrite($fp, $gravar->ID . ";\n");
		fclose($fp);
	}
}

$pos++; //não verdade, fora da condição pois tem que pular o arquivo dando certo ou não

if ($pos < $total_pos) {
	header("Location: teste.php?pos=" . $pos);
} else {
	echo 'Todos os XMLS foram lidos.';
}
?>

 

Se atente apenas que vc tinha me passado a estrutura do XML com uma TAG a menos (sem o <response>) e sem ela o PHP não lê. Outro fato é que no código vc chama por ID e na estrutura de XML que vc me passou estava Id. Ou seja, verifique se seu xml vem com uma tag antes das que vc passou (seja response ou qual for, basta ter) e se vem ID mesmo ao invés de Id.

 

Tô falando isso apenas pra evitar problemas na hora que vc for executar. Eu montei 4 XMLs aqui de teste, um com o formato de erro e mandei salvar no arquivo TXT com ponto e vírgula e quebra de linha. Tudo funcionou redondo com esse código que postei agora.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou testar com o codigo que vc psotou acima.

antes eu deixei lendo todos os arquivos, mas quando chegou no xml 20 ele deu a mensagem abaixo

 

Redirecionamento incorreto
O Firefox detectou que o pedido para este endereço não será concluído devido à forma que o servidor o está redirecionando.
Este problema algumas vezes pode ser causado pela desativação ou bloqueio de cookies

 

isso dava antes quando nao tinha o Id, mas depois vc editou o codigo pra remover isso e parece que deu novamente. Não entendi, vou executar novamente.

 

Sim tem o response esqueci de escreve-lo e o Id realmente estava errado

 

@EDIT

 

executei novamente e sempre quando chega no pos=20 ele da esta mensagem. Porque? não entendi

de 20 em 20 acontece isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que seu firefox vai continuar bloqueando.

É uma função de segurança no seu navegador. Ele vê que a página redireciona e não carrega nunca, ele acha que vc está sendo trollado.

 

Aí acho que tá na hora da gente voltar a discutir o "por que" que vc não consegue ler mais de um XML em uma execução só.

Compartilhar este post


Link para o post
Compartilhar em outros sites

que merd** tem :(

sera que consigo uma forma de quebrar este bloqueio ao mesmo pra ler todos xml?

 

sera que com IE acontece? se bem que IE ninguem merece tbm deve bloquear no 2 rsrsrs



@edit

 

parece que no IE, ele ta lendo todos, pelo menos agora ta no 30

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, qual erro que vc tem quando tenta assim:

 

<?php
set_time_limit(3600); //1 hora pra dar timeout
$xmls = array(
	'http://localhost/test/xmls/xml1.xml',
	'http://localhost/test/xmls/xml2.xml',
	'http://localhost/test/xmls/xml3.xml',
	'http://localhost/test/xmls/xml4.xml'
);

$fp = fopen("bloco.txt", "a"); //passei o fopen e fclose pra dentro do loop pra não abrir o arquivo se não for gravar

foreach ($xmls as $xml) {

	$xmldata = simplexml_load_file($xml);

	if (!empty($xmldata->Data->ID)) { //verifica se o valor existe
		foreach ($xmldata->Data as $gravar) {    
			$escreve = fwrite($fp, $gravar->ID . ";\n");
		}
	}

}

fclose($fp);
echo 'Todos os XMLS foram lidos.';
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

deste jeito nenhum, ele le normal

 

@edit

com o IE ja leu 94

 

@edit 2

travou no xml 101 e parece que em alguns momentos ele gravou 2x o mesmo xml, ficando duplicada a linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

tbm não sei, sera que é o firefox que ta travando?

sem os redirect ele dava o erro 503, quando passava varios xml, neste exemplo acima so testei com 2

 

pode ser isso

 

vou ler com todos xmls, sem o redirect

Compartilhar este post


Link para o post
Compartilhar em outros sites

sem os redirect não funciona mesmo não

por algum motivo ele da este erro, parece que ele le tudo na memoria pra depois sair imprimindo, isso deve sobrecarregar

 

@edit

porque as vezes ele repete o conteudo, aparece alguns registros iguais. estranho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito estranho mesmo parceiro... Não tem sentido isso pra mim.

Meus testes vão OK.

 

Vai se contentar com o IE então?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele sempre para no 101 ou 102, como tenho 300 e poucos xml acho que da levar por enquanto, quebro ele em 3 partes.

se acha que por um contador quando chegar em 100 e dar tipo um standby e depois comecar novamente sera q da certo?

 

cara muito obirgado pelo ajuda, obrigado mesmo :)

ajudou bastante

Compartilhar este post


Link para o post
Compartilhar em outros sites

A gente pode fazer o redirect em javascript. Talvez o firefox dê como carregado dessa forma...

Testa por favor:

<?php
#set_time_limit(3600); //1 hora pra dar timeout
$pos = 0;

if (!empty($_GET['pos'])) {
	$pos = $_GET['pos'];
}

$xmls = array(
	'http://localhost/test/xmls/xml1.xml',
	'http://localhost/test/xmls/xml2.xml',
	'http://localhost/test/xmls/xml3.xml',
	'http://localhost/test/xmls/xml4.xml'
);

$total_pos = count($xmls);
$xmldata = simplexml_load_file($xmls[$pos]);

if (!empty($xmldata->Data->ID)) { //verifica se o valor existe
	foreach ($xmldata->Data as $gravar) {    
		$fp = fopen("bloco.txt", "a"); //passei o fopen e fclose pra dentro do loop pra não abrir o arquivo se não for gravar
		$escreve = fwrite($fp, $gravar->ID . ";\n");
		fclose($fp);
	}
}

$pos++; //não verdade, fora da condição pois tem que pular o arquivo dando certo ou não

if ($pos < $total_pos) {
	echo '<script type="text/javascript">
	window.location = \'teste.php?pos=\'' . $pos . '\';
	</script>';
} else {
	echo 'Todos os XMLS foram lidos.';
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

parece que nao consegue redirecionar, so le 2 e para



mas creio que com o DISTINCT consigo retirar estas duplicidades

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho, deixei lendo os xml e vi que ele pulou alguns sera que esta atropelando e nao ta lendo

tem como por um tempo pra leitura?

 

e em um deles leu id e nome, mas nao leu sobrenome isso para um mesmo xml 0o

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito estranho. Mas ele não faz leitura do redirect enquanto não terminar de ler o XML. Não é pra pular de forma alguma.

Seus XMLs são 100% confiáveis sempre?

Compartilhar este post


Link para o post
Compartilhar em outros sites

num sei, pode ser o servidorzinho q da algum problema e da algum problema e nao consegue ler o xml e assim pula ele. Eu comecei a aumentar os dados do xml pra varias linhas pra ver, porque antes era so umas 10 linhas

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.