Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, tudo bem pessoal? Preciso ler datas de registros no XML e calcular quantos registros que há na semana atual. Com MySQL consigo fazer, porém com XML não tenho ideia de como fazer. Podem me ajudar? Obrigado.
SimpleXML irá te ajudar.
Então, ler os registros eu consigo, preciso obter os registros da semana atual, não faço ideia de como fazer isso.
Como está a estrutura ?
Como está a estrutura ?
<filename></filename>
<endip></endip>
<data></data>Detalhada, já com a data.
Detalhada, já com a data.
<playlist>
<item>
<filename>cd1</filename>
<endip>meu ip</endip>
<data>06/10/2015</data>
</item>
<item>
<filename>cd2</filename>
<endip>meu ip</endip>
<data>06/10/2015</data>
</item>
<item>
<filename>cd3</filename>
<endip>meu ip</endip>
<data>06/10/2015</data>
</item>
</playlist>Try:
$XML = SEUXML...;
$Data = date(??);
$XP = new DOMXPath($XML);
$Query = $XP->query('//data[contains(., $Data)]');
foreach($Query as $Valor):
var_dump($Valor->nodeValue);
endforeach;Apareceu um erro:
(!) Capturável erro fatal: Argumento 1 passado para DOMXPath :: __ construct () deve ser uma instância de DOMDocument, string dada em [...] (na linha $XP = new...)
$XML = "downloads.xml";
$Data = date(date("d/m/Y"));
$XP = new DOMXPath($XML);
$Query = $XP->query('//data[contains(., $Data)]');
foreach($Query as $Valor):
var_dump($Valor->nodeValue);
endforeach;
Fiz algo errado?
Sim, o xml tem que ser em string não em arquivo, usa file_get_contents
Sim, o xml tem que ser em string não em arquivo, usa file_get_contents
Fiz isso, porém apareceu o mesmo erro.
$XML = file_get_contents("downloads.xml");
$Data = date(date("d/m/Y"));
$XP = new DOMXPath($XML);
$Query = $XP->query('//data[contains(., $Data)]');
foreach($Query as $Valor):
var_dump($Valor->nodeValue);
endforeach;
Obrigado.
Pronto :) :
$XML = file_get_contents('download.xml'); // Obtem o conteudo do download.xml.
$XML = new SimpleXMLElement($XML); // Inicia o SimplesXMLElement, informando o nosso download.xml como parâmetro para a __construct.
$Query = $XML->xpath('/playlist//item'); // XPath query, obtendo todos os item.
$Itens = json_decode(json_encode($Query), true); // Transformando os objetos em arrays, se tiver um método melhor use !
$Data = date("d/m/Y"); // Obtendo a data atual, adicione um item ao seu XML para teste.
$Item = false; // Mais pra frente usaremos para armazenar o array com os dados encontrados, logo, tornei false de começo.
foreach($Itens as $Key => $Value):
if(in_array($Data, $Value)): // Verifica se no array percorrido existe o valor que desejamos, a data.
$Item = $Value; // Encontrou o valor, seta para a $Item, ele não será mais false, de agora em diante será um array.
break; // Não precisamos mais percorrer este array pois o valor já foi encontrado, pare foreach !
endif;
endforeach;
// Temos o array pronto, você pode usar o var_dump($Item); para verificar se está tudo certo, vamos então exibir estes itens:
echo "Filename: " . $Item['filename'] . "</br>";
echo "EndIP: " . $Item['endip'] . "</br>";
echo "Data: " . $Item['data'] . "</br>";
Exemplo com cURL (Recomendo usar cURL):
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'download.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$XML = curl_exec($ch);
curl_close($ch);
$XML = file_get_contents('download.xml'); // Obtem o conteudo do download.xml.
$XML = new SimpleXMLElement($XML); // Inicia o SimplesXMLElement, informando o nosso download.xml como parâmetro para a __construct.
$Query = $XML->xpath('/playlist//item'); // XPath query, obtendo todos os item.
$Itens = json_decode(json_encode($Query), true); // Transformando os objetos em arrays, se tiver um método melhor use !
$Data = date("d/m/Y"); // Obtendo a data atual, adicione um item ao seu XML para teste.
$Item = false; // Mais pra frente usaremos para armazenar o array com os dados encontrados, logo, tornei false de começo.
foreach($Itens as $Key => $Value):
if(in_array($Data, $Value)): // Verifica se no array percorrido existe o valor que desejamos, a data.
$Item = $Value; // Encontrou o valor, seta para a $Item, ele não será mais false, de agora em diante será um array.
break; // Não precisamos mais percorrer este array pois o valor já foi encontrado, pare foreach !
endif;
endforeach;
// Temos o array pronto, você pode usar o var_dump($Item); para verificar se está tudo certo, vamos então exibir estes itens:
echo "Filename: " . $Item['filename'] . "</br>";
echo "EndIP: " . $Item['endip'] . "</br>";
echo "Data: " . $Item['data'] . "</br>";Apareceu erro na linha "$XML = new SimpleXMLElement($XML);".
>
( ! ) Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\wamp\www\leo\index.php on line 50 ( ! ) Exception: String could not be parsed as XML in C:\wamp\www\leo\index.php on line 50
free4k, provavelmente o arquivo não existe, pois fiz os exemplos acima tudo testando, e se quiser saber, usei o php 5.12
Verdade, não tinha reparado. Só que ele mostrou só os registros do dia, preciso dos registros da semana.
Try ae my friend:
$XML = file_get_contents('download.xml'); //Obtem o conteudo do download.xml.
$XML = new SimpleXMLElement($XML); //Inicia o SimplesXMLElement, informando o nosso download.xml como parâmetro para a __construct.
$Query = $XML->xpath('/playlist//item'); //XPath query, obtendo todos os item.
$Itens = json_decode(json_encode($Query), true); //Transformando os objetos em arrays, se tiver um método melhor use !
$SemanaAtual = date('W', strtotime(date("Y-m-d"))); //Obtendo a semana atual.
$CDS = []; //Mais pra frente usaremos para armazenar o array com os dados encontrados, por enquanto ela é um array vazio, do tipo false
foreach($Itens as $Key => $Value):
if(date('W', strtotime(str_replace('/', '-', $Value['data']))) == $SemanaAtual):
$CDS[] = $Value; //Encontrou o valor, seta para a $CDS, ele não será mais false, de agora em diante será um array.
endif;
endforeach;
if($CDS):
foreach($CDS as $CD):
echo "Filename: " . $CD['filename'] . "</br>";
echo "EndIP: " . $CD['endip'] . "</br>";
echo "Data: " . $CD['data'] . "</br>";
endforeach; echo "Nenhum registro encontrado para a semana atual !";
endif;Muito obrigado :) .
SimpleXML irá te ajudar.