Ir para conteúdo

Arquivado

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

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

  • Conteúdo Similar

    • Por Jack Oliveira
      Boa noite galera..
       
      Estou tentando gerar um sitemap com php
       
      So que tenho que por o limit 1200 
       
      mais que isso ele nao gera e se deixar sem limit 
       
      Obs: o banco de dados contem mais de 10 mil registros
      <?php // Data e hora atual $datetime = new DateTime(date('Y-m-d H:i:s')); // A linha abaixo me retornará uma data no seguinte formato: 2017-11-22T00:06:23-02:00 $date = $datetime->format(DateTime::ATOM); // ISO8601 // Gera o arquivo XML do sitemap $xml = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> <url> <loc>'.ConfigPainel('site_url').'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; $Query = DBRead('cidades','*',"WHERE status ='1' ORDER BY nome ASC"); if (is_array($Query)) { foreach ($Query as $modcid) { $xml .=' <url> <loc>'.ConfigPainel('site_url').''.$modcid['subdominio'].'/</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; //$QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC"); $QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC LIMIT 1200"); if (is_array($QueryR)) { foreach ($QueryR as $v) { $Queryc = DBRead('cidades', '*',"WHERE id='{$v['cidade']}' ORDER BY nome ASC")[0]; if(empty($v['slug'])) { }else{ $urlseo = ''.ConfigPainel('site_url').''.$Queryc['subdominio'].'/list/'.$v['slug'].'/'; $xml .=' <!-- INICIO DA EMPRESA '.TRIM($v['titulo']).' --> <url> <loc>'.$urlseo.'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>0.85</priority> </url> <!-- FIM DA EMPRESA '.TRIM($v['titulo']).' --> '; } }} }} $xml .= ' </urlset>'; // Abre o arquivo ou tenta cria-lo se ele não exixtir $arquivo = fopen('../sitemap.xml', 'w'); if (fwrite($arquivo, $xml)) { Redireciona('./index.php?sucesso'); } else { Redireciona('?erro'); } fclose($arquivo); // Compactar arquivo sitemap para GZIP $data = implode("", file("sitemap.xml")); $gzdata = gzencode($data, 9); $fp = fopen("sitemap.xml.gz", "w"); fwrite($fp, $gzdata); fclose($fp); // Envia para o Google o novo sitemap gerado $urlSitemap = "http://www.google.com/webmasters/sitemaps/ping?sitemap=".ConfigPainel('site_url').""; // Arquivos a serem enviados $Files = ['sitemap.xml', 'sitemap.xml.gz']; // Envia os dois arquivos sitemap gerados para a URL do Google foreach ($Files as $file) { $url = $urlSitemap . $file; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); } ?> Caso ouve outra forma que eu possa gerar este sitemap com php fico grato...
    • Por marcelo.ourico
      Estou precisando fazer o envio de um XML via webservice. Estou utilizando PHP 7.4 e nuSoap.

      Porém esse XML de envio possui várias tags com hífen. Por exemplo <tag-name></tag-name>.
       
      Esse hífen tem sido um problema, principalmente por que eu não posso enviar o XML como string. Apenas como objeto. Então imaginem isso:
       
      $objeto = simplexml_load_string($string_xml);  
      Se simplesmente eu tentar resgatar o valor da TAG já dá erro...
       
      $campo1= $objeto->tag-name;
      O erro ocorre em função de que o hífen é um caractere reservado do PHP... Então como resolver?

      Independente disso, quando eu tento fazer o envio via nuSoap, também recebo erro abaixo:
      wsdl->getTypeDef('tag-name', 'http://xyz.abr...')
      wsdl->serializeType('tag-name', 'tag-name', Object(SimpleXMLElement), '

      Alguém já passou por isso? Sabe como resolver? Pode dar uma dica?
    • Por alessandra.barreto
      Boa Tarde
      Estou fazendo uma importacao de dados do SQL pro Oracle.
      Tenho campos (datetime2(7)) no SQL e Date no Oracle.
      Não consigo fazer a importação, o Oracle retorna erro de  [Microsoft][ODBC Oracle Wire Protocol driver]Timestamp parameters with a scale, must have a scale less than ten and a precision equal to 20 plus the scale.  You specified a precision of 0 and scale of 6. ". Alguém pode me ajudar?

       
    • Por alysson122010
      Gostaria de saber como eu consigo recuperar dados do xml da seguinte forma. Tenho esse meu codigo php
       
      foreach($xml -> cadastros->exame as $item_3){  
                  $codigo = $item_3['codigo']; 
      }
       
      Que recuperar os exames desse xml:
      <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <resultados versao="20101018" origem="aol" datahora="2021-07-22 08:25:45">     <cadastros>         <pacientes>             <paciente codigo="250058718" codigo_lis="" codigo_aol="250058718" datanasc="" nome=" " sexo="M"/>         </pacientes>         <materiais>             <material codigo="856" descricao="plasma citratado"/>             <material codigo="879" descricao="sangue total EDTA"/>             <material codigo="543" descricao="soro"/>         </materiais>         <exame codigo="TSH" descricao="TSH - HORMÔNIO TIREOESTIMULANTE - Ultrassensivel" dataalteracao="21/11/2019 17:37:15">             <linhasresultado>                 <linha codigo="1240" descricao="TSH - HORMÔNIO TIREOESTIMULANTE Ultrasensivel" unidade="µUI/mL"/>             </linhasresultado>             <valorreferencia><![CDATA[0 a 3 dias: 1,100 a 15,700 µUI/mL 3 dias a 2 meses e 14 dias: 0,600 a 9,200 µUI/mL 2meses 14dias a 1ano 3meses:0,400 a 6,000 µUI/mL 1 ano e 3 meses a 6 anos: 0,400 a 5,200 µUI/mL 6 a 15 anos: 0,300 a 4,200 µUI/mL 15 a 60 anos: 0,400 a 4,300 µUI/mL 60 a 80 anos: 0,400 a 5,800 µUI/mL Superior a 80 anos: 0,400 a 6,700 µUI/mL Gestantes: Primeiro Trimestre: 0,100 a 3,600 µUI/mL Segundo Trimestre: 0,400 a 4,300 µUI/mL Terceiro Trimestre: 0,400 a 4,300 µUI/mL ]]></valorreferencia>         </exame>         <exame codigo="LIPAS" descricao="LIPASE" dataalteracao="28/03/2019 09:23:47">             <linhasresultado>                 <linha codigo="883" descricao="LIPASE" unidade="U/L"/>             </linhasresultado>             <valorreferencia><![CDATA[Inferior a 60,0 U/L]]></valorreferencia>         </exame>         <exame codigo="T4L" descricao="T4 - TIROXINA LIVRE" dataalteracao="16/04/2019 14:43:34">             <linhasresultado>                 <linha codigo="1174" descricao="T4 - TIROXINA LIVRE" unidade="ng/dL"/>             </linhasresultado>             <valorreferencia><![CDATA[0,70 a 1,80  ng/dL]]></valorreferencia>         </exame>         <exame codigo="AMILA" descricao="AMILASE TOTAL" dataalteracao="16/04/2019 12:02:51">             <linhasresultado>                 <linha codigo="83" descricao="AMILASE TOTAL" unidade="U/L"/>             </linhasresultado>             <valorreferencia><![CDATA[Até  115,0 U/L]]></valorreferencia>         </exame>         <exame codigo="FA" descricao="FOSFATASE ALCALINA" dataalteracao="15/04/2019 11:51:01">             <linhasresultado>                 <linha codigo="542" descricao="FOSFATASE ALCALINA" unidade="U/L"/>             </linhasresultado>             <valorreferencia><![CDATA[0 a 14 dias: 82 a 249 U/L 15 dias a 1 ano: 122 a 473 U/L Sexo Feminino: Feminino 1 a 9 anos: 149 a 301 U/L Feminino 10 a 12 anos: 127 a 326 U/L Feminino 13 a 14 anos: 62 a 212 U/L Feminino 15 a 16 anos: 52 a 120 U/L Feminino 17 a 18 anos: 45 a 97 U/L Adultos: 25 a 100 U/L Sexo Masculino: Masculino 1 a 9 anos: 149 a 301 U/L Masculino 10 a 12 anos: 127 a 326 U/L Masculino 13 a 14 anos: 129 a 437 U/L Masculino 15 a 16 anos: 78 a 268 U/L Masculino 17 a 18 anos: 40 a 129 U/L Adultos: 25 a 100 U/L Referência: Fontes R, Cavalari E, Vieira Neto L, et al. Alkaline phosphatase: reference interval transference from CALIPER to a pediatric Brazilian population. J Bras Patol Med Lab. 2018; 54(4): 227-31.]]></valorreferencia>         </exame>         <exame codigo="HBGLI3" descricao="HEMOGLOBINA GLICADA" dataalteracao="28/06/2021 09:26:18">             <linhasresultado>                 <linha codigo="12976" descricao="Hb SA1c - Forma estável" unidade="%"/>                 <linha codigo="16572" descricao="Glicose Média Estimada (GME)" unidade="mg/dL"/>             </linhasresultado>             <valorreferencia><![CDATA[ Hemoglobina Glicada - Hb SA1c Normal: Inferior a 5.7% Risco aumentado para Diabetes Mellitus: 5,7 a 6,4% Diabete Mellitus: Igual ou superior a 6,5% Para o diagnóstico de Diabetes Mellitus a dosagem  de HbA1c deve ser confirmada com novo exame em dia diferente,exceto se houver hiperglicemia inequívo- ca com descompensação metabólica aguda ou sintomas clássicos da doença. A Associação Americana de Diabetes recomenda como  meta para o tratamento de pacientes diabéticos re- sultados de HbA1c iguais ou inferiores a 7%.  Conforme recomendado pela American Diabetes Asso- ciation(ADA) e European Association for the Study  of Diabetes (EASD), estamos liberando cálculo da  glicose média estimada(GME). Este cálculo é obtido a partir do valor de HbA1c através de uma fórmula  matemática baseada em uma relação linear entre os  níveis de HbA1c e a glicose média sanguínea.  Ref. Diabetes Care, 2014; 37 (suppl 1): 81-90/Diretri- zes da Sociedade Brasileira de Diabestes/2013-2014 :9-11.]]></valorreferencia>         </exame>         <exame codigo="COAG4" descricao="COAGULOGRAMA IV" dataalteracao="06/09/2019 14:27:19">             <linhasresultado>                 <linha codigo="14811" descricao="PLAQUETAS - Contagem" unidade="/uL"/>             </linhasresultado>             <valorreferencia><![CDATA[Atividade de Protrombina: 70 a 100% RNI: 0,80 a 1,20 Ratio: Inferior a 1,25 Plaquetas: 150.000 a 450.000/uL RNI - Intervalo de Refêrencias(Alvos Terapeuticos) Recomendações do American College of Physicians, National Heart Lung and Blood Institute for Haematology.]]></valorreferencia>         </exame>     </cadastros>     <solicitacao codigo="238228701" codigo_aol="238228701" paciente="250058718">         <amostras>             <amostra codigo="0" descricao="Basal" material="856"/>             <amostra codigo="1" descricao="Basal" material="879"/>             <amostra codigo="2" descricao="Basal" material="543"/>         </amostras>         <exame codigo="FA" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico" observacao="" normal="S">             <resultado amostra="2" linharesultado="542" resultado="51,0"/>         </exame>         <exame codigo="HBGLI3" dataresultado="20/07/2021 05:48:28" metodo="Imunoensaio Turbidimétrico de Inibição " observacao="" normal="S">             <resultado amostra="1" linharesultado="12976" resultado="5,1"/>             <resultado amostra="1" linharesultado="16572" resultado="100"/>         </exame>         <exame codigo="TSH" dataresultado="20/07/2021 04:27:20" metodo="Eletroquimioluminescência" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="1240" resultado="2,000"/>         </exame>         <exame codigo="AMILA" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico Enzimático" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="83" resultado="83,0"/>         </exame>         <exame codigo="COAG4" dataresultado="21/07/2021 13:29:20" metodo="Coagulométrico/Sistema Automatizado" observacao="" normal="S">             <resultado amostra="0" linharesultado="14811" resultado="305000"/>         </exame>         <exame codigo="LIPAS" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico Enzimático" observacao="" normal="S">             <resultado amostra="2" linharesultado="883" resultado="47,0"/>         </exame>         <exame codigo="T4L" dataresultado="20/07/2021 04:27:20" metodo="Eletroquimioluminescência" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="1174" resultado="1,16"/>         </exame>     </solicitacao> </resultados>  
      Até ai consegui e conseguir mostrar o valor de codigo="codigo do exame". Porém preciso fazer uma segunda consulta da parte :
       
       
      <solicitacao codigo="238228701" codigo_aol="238228701" paciente="250058718">         <amostras>             <amostra codigo="0" descricao="Basal" material="856"/>             <amostra codigo="1" descricao="Basal" material="879"/>             <amostra codigo="2" descricao="Basal" material="543"/>         </amostras>         <exame codigo="FA" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico" observacao="" normal="S">             <resultado amostra="2" linharesultado="542" resultado="51,0"/>         </exame>         <exame codigo="HBGLI3" dataresultado="20/07/2021 05:48:28" metodo="Imunoensaio Turbidimétrico de Inibição " observacao="" normal="S">             <resultado amostra="1" linharesultado="12976" resultado="5,1"/>             <resultado amostra="1" linharesultado="16572" resultado="100"/>         </exame>         <exame codigo="TSH" dataresultado="20/07/2021 04:27:20" metodo="Eletroquimioluminescência" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="1240" resultado="2,000"/>         </exame>         <exame codigo="AMILA" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico Enzimático" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="83" resultado="83,0"/>         </exame>         <exame codigo="COAG4" dataresultado="21/07/2021 13:29:20" metodo="Coagulométrico/Sistema Automatizado" observacao="" normal="S">             <resultado amostra="0" linharesultado="14811" resultado="305000"/>         </exame>         <exame codigo="LIPAS" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico Enzimático" observacao="" normal="S">             <resultado amostra="2" linharesultado="883" resultado="47,0"/>         </exame>         <exame codigo="T4L" dataresultado="20/07/2021 04:27:20" metodo="Eletroquimioluminescência" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="1174" resultado="1,16"/>         </exame>     </solicitacao>  
      Onde eu consiga pegar o codigo que recuperei acima e liste os resultados da parte de solicitacao referente ao codigo="codigo do exame que eu listei a cima" mas nao to conseguindo fazer. Como eu posso fazer isso?
    • Por ILR master
      Fala pessoal.
       
      Estou importando um arquivo xml para o meu DB porém, não consigo ler o campo data do xml. Todos os campos são lidos, menos o campo data. No xml ele está nesse formato: 09/06/2021 23:59:00
      Abaixo segue o código que estou usando:
       
      $xml = simplexml_load_file('cupons.xml');
      foreach($xml->coupon as $cupom) {
          echo $cupom->code.'<br>';
          echo $cupom->data.'<br>';
      }
       
      Obrigado!
×

Informação importante

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