Ir para conteúdo
free4k

Trabalhar com datas no XML

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
else:
	echo "Nenhum registro encontrado para a semana atual !";
endif;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por eduardohaag
      Olá estou criando um sistema onde preciso calcular a previsão de envio do pedido em dias uteis, para isso estou usando um webservice gratuito que retorna um xml, porém estou tendo o erroSystem.XML.XmlException: 'Dados no nível raiz inválidos. Linha 1, posição 1.'
       
      Meu código é 
      Sub Preenchedata() Dim sql = "SELECT PrazoPadraoProducao FROM Configuracoes" Dim dr As DataTable = AcessoDB.ExecutarComando(sql, CommandType.Text, Nothing, AcessoDB.TipoDeComando.ExecuteDataTable) Dim ds As New DataSet Dim xml As String = "https://elekto.com.br/api/Calendars/br-BC/Add?initialDate=" & Now.Year & "-" & Now.Month & "-" & Now.Day & "&days=" & dr.Rows(0).Item(0) & "&type=work" ds.ReadXml(xml)  
      e o xml retornado é 
       
      <dateTime xmlns="http://schemas.microsoft.com/2003/10/Serialization/">2019-05-03T00:00:00Z</dateTime>  
      Alguém tem alguma ideia de como posso eliminar o erro?
    • Por tiagosp
      Estou tentando enviar uma solicitação ao web servirço do Correios, porém não consigo obter a resposta.
      var cep = document.getElementById("cep").value; var doc = "http://cep.republicavirtual.com.br/web_cep.php?cep=" + cep + "&formato=xml" var xhttp = new XMLHttpRequest(); xhttp.open("GET", doc, false); xhttp.send(); O parametro cep é passado pela url, logo imagino que o método seja GET, deixei o terceiro parametro como false, pois estou apenas testando e não conheço nada de javascript, sei que quando esse parametro é true, é preciso checar quando chega a resposta.
      Por fim, o xhttp.response não retorna nada...
    • Por Diego_IVORECAP
      Boa tarde, Gostaria de ajuda de vocês,
       
      Estou com dificuldade em linkar meu arquivo XML vinda de outro servidor com pasta compartilhada. Já fiz Mapeamento e tentei acessar de algumas formas mas sem sucesso,
      No servidor local acessa sem problemas, mas quando vou acessar o arquivo pelo mapeamento vinda de uma pasta compartilhada não encontra o arquivo. Dei uma olhada no manual do PHP mas não consegui achar nada que me trouxesse uma luz.Abaixo parte do código. Desde já agradeço.

      Assim não encontra arquivo:
      $link = "//192.168.1.3/work/TOTALCAP/AM/horas.xml"; //link do arquivo xml
      $xml = simplexml_load_file($link) -> channel; //carrega o arquivo XML e retornando um Array

      Assim funciona normalmente:
      $link = "../horas.xml"; //link do arquivo xml
      $xml = simplexml_load_file($link) -> channel; //carrega o arquivo XML e retornando um Array
    • Por ozielusa
      Bom dia Pessoal.
      Sou Leigo em Jquery e estou precisando da ajuda de vocês para o seguinte:
      Tenho este arquivo XML que é gerado e atualizado automaticamente por um software a cada vez que uma música termina e outra se inicia (Este arquivo é enviado automaticamente via FTP para o servidor a cada nova atualização).
      <?xml version="1.0" encoding="utf-8"?> <Schedule System="Jazler"> <Event status="happening" startTime="09:19:18" eventType="song"> <Announcement Display="Now On Air:"/> <Song title="Rachel Malafaia"> <Artist name="03"> </Artist> <Jazler ID="131"/> <PlayLister ID=""/> <Media runTime="00:03:55"/> <Expire Time="09:23:12"/> </Song> </Event> </Schedule> Preciso que a página do site leia este arquivo com a estrutura acima (que é gerada automaticamente) e atualize as informações de <Song Title>, <Artist name>, etc... em uma tag <li> na página HTML, mas preciso que essa atualização ocorra em tempo real sem a necessidade de recarregar (Refresh) a página. (Por isso gostaria que fosse com JQuery), mas como sou leigo no assunto, gostaria da ajuda dos colega sobre como fazer isso, pois os exemplos que tenho achado na internet eu não estou conseguindo fazer funcionar.
      Obrigado e forte abraço a todos. 

    • Por Fábio BN
      Olá.

      Tenho uma dúvida mas não sei se saberão me ajudar, tenho um E-commerce que faz o calculo de frete através de XML buscando no servidor dos Correios, como eu faço para quando o servidor dos Correios demorar de responder ou simplesmente tiver offline, ao invés de dar uma tela de erro, eu conseguir tratar esse retorno e redirecionar o cliente para um Outro Link alternativo.
      Ou seja, caso demorar por exemplo mais de 10 segundos o retorno, ou quando simplesmente cair o servidor, conseguir redirecionar para uma página de contingência de uma tabela própria.
       
      Abraços!

      Fábio Nascimento!
×

Informação importante

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