Ir para conteúdo

POWERED BY:

Arquivado

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

Carlos Antoliv

Só consigo pegar o primeiro registro do XML ao fazer loop com Foreach

Recommended Posts

Testando mais um pouco, ficou assim:

 

 

Nome Beneficiario: FULANO DE TAL
Registro ANS: 000011
Numero Guia: 60000000021
Codigo Procedimento: 40304361

 

Teria que ser:

 

 

Nome Beneficiario: FULANO DE TAL
Registro ANS: 000011
Numero Guia: 60000000021
Codigo Procedimento: 40000001

Codigo Procedimento: 40000002

Codigo Procedimento: 40000003

Codigo Procedimento: 40000004

 

 

 

Nome Beneficiario: CICRANO DAS CANDONGAS
Registro ANS: 000011
Numero Guia: 6000000452147
Codigo Procedimento: 40000021

Codigo Procedimento: 40000092

Codigo Procedimento: 40000083

Codigo Procedimento: 40000074

 

 

Acho que agora consegui explicar..rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o que postei tá fácil de resolver.

Basicamente é só fazer a mesma coisa com xpath para o nó desejado.

$dom = new DOMDocument('1.0', 'utf-8');
$dom->load("pacientes.xml");

$xpath = new DOMXPath($dom);

$pacientes = $xpath->query('//guiaSP-SADT');

foreach($pacientes as $item) {
    echo 'Nome Beneficiario: ', $xpath->query('dadosBeneficiario/nomeBeneficiario', $item)->item(0)->nodeValue, '<br>';
    echo 'Registro ANS: ', $xpath->query('cabecalhoGuia/registroANS', $item)->item(0)->nodeValue, '<br>';
    echo 'Numero Guia: ', $xpath->query('cabecalhoGuia/numeroGuiaPrestador', $item)->item(0)->nodeValue, '<br>';
    echo 'Procedimentos executados:<br>';

    foreach($xpath->query('//procedimentoExecutado', $item) as $procedimento) {
        printf('--> Data: %s<br>', $xpath->query('dataExecucao',$procedimento)->item(0)->nodeValue);
        printf('--> Codigo Tabela: %s<br>', $xpath->query('procedimento/codigoTabela',$procedimento)->item(0)->nodeValue);
        printf('--> Codigo procedimento: %s<br>', $xpath->query('procedimento/codigoProcedimento',$procedimento)->item(0)->nodeValue);
        printf('--> Descricao procedimento: %s<br>', $xpath->query('procedimento/descricaoProcedimento',$procedimento)->item(0)->nodeValue);
        printf('--> Quantia: %s<br>', $xpath->query('quantidadeExecutada',$procedimento)->item(0)->nodeValue);
        printf('--> reducaoAcrescimo: %s<br>', $xpath->query('reducaoAcrescimo',$procedimento)->item(0)->nodeValue);
        printf('--> valorUnitario: %s<br>', $xpath->query('valorUnitario',$procedimento)->item(0)->nodeValue);
        printf('--> valorTotal: %s<br>', $xpath->query('valorTotal',$procedimento)->item(0)->nodeValue);
        echo '<hr>';
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

hummm...

certoo..

vou tentar aqui e coloco o resultado. Já volto.... :D

 

 

Mano, estão mega feliz porque o caminho parece ser esse mesmo.

Cara, funcinou pela metade, mas funcinou!!!!!! rsrsrs... Tô muito felizz!!

 

Enviei uma mensagem no privado porque os dados do resultado são sigilosos.

Mas a resposta pode ser por aqui.

 

E de qualquer maneira, postaremos a solução aqui também.

 

O problema é: Os dados se repetem.

 

O que tu acha que pode ser??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca o XML para download em algum lugar e manda o link

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho, mas não passo nestas situações.

Coloca num dropbox, gdrive da vida e manda o link.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não posso colocar aqui porque são dados sigilosos. Entende?

Vou ver o que faço...perae rapidinn

 

 

Não consigo nem hospedar em nenhum lugar. Bloqueadão!

Mas vou fazer assim, te mando o login e senha do email e tu pega de lá..

pode ser..?? O que tu acha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta trocar isto

$xpath->query('//procedimentoExecutado', $item)

por isto

// note o ponto antes das barras
$xpath->query('.//procedimentoExecutado', $item)

Compartilhar este post


Link para o post
Compartilhar em outros sites

enviei para o teu privado os dados do arquivo...

Vou tentar a tua sugestão e posto o resultado.

So vou demorar um pouco..

mas daqui a 2 h..

mas posto sim..

agradeço pela paciencia e empenho em ajudar-me.

 

abç!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

CRÉDITO PARA:

 

hufersil

 

//********************************************************************************************************************************************

 

Mano, funcinou!!!!!!!!!!!!!!!!!!!!

 

Acrescentei o ponto ( . ) como você sugeriu e BRASIL!!

 

 

// note o ponto antes das barras
$xpath->query('.//procedimentoExecutado', $item)

 

 

Depois de vários dias, o problema foi resolvido. Eu estava utilizando o "simplexml_load_file()". Esse DOMXpath tinha usado direito nao. Agora é estudar o código. Eu gostaria muito de estudar esse DOMXpath. Se tiver material para indicar...

 

Só tenho a te agradecer pelo tempo, dedicação e empenho. Pouco ajudam assim.. Muito agradecido mesmo.

Que Deus te conceda esse conhecimento mais e mais..

 

 

Vou postar o codigo com a solução.

 

 

<?php
 
$dom = new DOMDocument('1.0', 'utf-8');
$dom->load("arquivo_xml.xml");
 
$xpath = new DOMXPath($dom);
 
$pacientes = $xpath->query('//guiaSP-SADT');
 
foreach($pacientes as $item) {
    echo 'Nome Beneficiario: ', $xpath->query('dadosBeneficiario/nomeBeneficiario', $item)->item(0)->nodeValue, '<br>';
    echo 'Registro ANS: ', $xpath->query('cabecalhoGuia/registroANS', $item)->item(0)->nodeValue, '<br>';
    echo 'Numero Guia: ', $xpath->query('cabecalhoGuia/numeroGuiaPrestador', $item)->item(0)->nodeValue, '<br>';
    echo 'Procedimentos executados:<br>';
 
    foreach($xpath->query('.//procedimentoExecutado', $item) as $procedimento) 
                {
        printf('--> Data: %s<br>', $xpath->query('dataExecucao',$procedimento)->item(0)->nodeValue);
        printf('--> Codigo Tabela: %s<br>', $xpath->query('procedimento/codigoTabela',$procedimento)->item(0)->nodeValue);
        printf('--> Codigo procedimento: %s<br>', $xpath->query('procedimento/codigoProcedimento',$procedimento)->item(0)->nodeValue);
        printf('--> Descricao procedimento: %s<br>', $xpath->query('procedimento/descricaoProcedimento',$procedimento)->item(0)->nodeValue);
        printf('--> Quantia: %s<br>', $xpath->query('quantidadeExecutada',$procedimento)->item(0)->nodeValue);
        printf('--> reducaoAcrescimo: %s<br>', $xpath->query('reducaoAcrescimo',$procedimento)->item(0)->nodeValue);
        printf('--> valorUnitario: %s<br>', $xpath->query('valorUnitario',$procedimento)->item(0)->nodeValue);
        printf('--> valorTotal: %s<br>', $xpath->query('valorTotal',$procedimento)->item(0)->nodeValue);
        echo '<hr>';
    }
}
 
 
?>

 

Agradeço memo.

 

Um abraçoo!!

 

Fica com DEUS!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por daemon
      Boa tarde,
       
      Duvida simples...
       
      Quando recupero os dados RSS, para inserir no banco de dados esta salvando corretamento porém no mysql esta com (ponto) . na frente de todos os registros via RSS.
       
      Fica com um ponto na frente outro atras...
       
      Data/hora:
      .2024-11-30 10:03:47.
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • 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 Willian Simione
      Boa Noite, alguem poderia me ajudar em uma situação, estou tetnando gravar os dados da tela abaixo, porem nao estou conseguindo montar o jeito certo pra ele gravar todos os dados de uma vez

    • Por vicente386
      Ola. Tenho uma tabela no 3 campos que sao "LIVRO, POS, PAGINA" ao qual a logica e a seguinte: cada livro tem 100 paginas cada pagina tem 30 posiçoes tenho 8,364 registros pra inserir chegando a 100 paginas com 30 posiçoes cada passa para o livro 2 e como fazer o update na tabela inserindo nos campos LIVRO = 1, POS de 0 a 30 e PAGINA 1 para cada 30 registros logos apos pagina 2 ?
      estou tentando fazer assim:
      <?php > ini_set('max_execution_time', 2000); $pdo = new > DO(DB_SERVER.":host=".DB_HOST.";dbname=".DB_BASE,DB_USER,DB_PASSWORD); > $sql = $pdo->prepare("SELECT count(*) FROM tabela2018"); > $sql->execute(); > $livro = 1; > foreach($sql as $obj){ > $variavel = $obj[0]; > ceil((float)$variavel/100); > $qtdlaco = ceil((float)$variavel/100); > for ($id = 1; $id <= 35; $id++) { > for($L=1; $L < $qtdlaco; $L++) { > for ($P = 0; $P <= 30; $P++) { > $sql = $pdo->prepare("UPDATE tabela2018 SET LIVRO = :LIVRO, POS = :POS, PAGINA = :PAGINA WHERE idtabela2018 = $id"); > $sql->bindValue(':LIVRO', $livro); > $sql->bindValue(':POS', $P); > $sql->bindValue(':PAGINA', $L); > $sql->execute(); > } > } > } >} ?> mas na tebela so aparece: LIVRO POS PAGINA 1 30 83 1 30 83 1 30 83 e nao como deveria : LIVRO POS PAGINA 1 0 1 1 1 1 1 2 1
×

Informação importante

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