Buscar dados no arquivo XML de retorno

277 views
Skip to first unread message

Nelson Monteiro

unread,
Mar 19, 2014, 9:56:56 AM3/19/14
to nfe...@googlegroups.com

  Pessoal, estou com dificuldade para acessar este arquivo XML,  Alguem pode dar  alguma dica, como eu devo ler este arquivo,
  já utilizei esta mesmo exemplo para nota fiscal eletronica e não tive problemas.

  Sei que o erro ocorre devido aos dois pontos "soap:Evelope", já tentei várias outras opções e não estou conseguindo,

  Fico grato pela ajuda.



101                $xml       = simplexml_load_file($MeuArquivo);
102                $cStatus = $xml->soap:Envelope->soap:Body->nfeConsultaNFDestResult->retConsNFeDest->cStat;  
103                print_r(  $cStatus );


              ERRO QUE OCORRE:
              Parse error: syntax error, unexpected ':' in C:\NetMake\7.1\wwwroot\nfephp-new\ScriptImpRetNfe.php on line 102


XML DE EXEMPLO
soap:Envelope>
<soap:Body>
<nfeConsultaNFDestResult>
<retConsNFeDest versao="1.01">
 <tpAmb>1</tpAmb>
 <verAplic>1.1.0</verAplic>
 <cStat>137</cStat>
 <xMotivo>Nenhum documento localizado para o destinatario</xMotivo>
 <dhResp>2014-03-17T15:17:40</dhResp>
 <indCont>0</indCont>
 <ultNSU>9411895638</ultNSU>
 </retConsNFeDest>
 </nfeConsultaNFDestResult>
 </soap:Body>
 </soap:Envelope>



Roberto Machado

unread,
Mar 19, 2014, 10:54:48 AM3/19/14
to nfe...@googlegroups.com
Nelson;

Não sei bem como seu script funcionou antes mas eu usaria algo como :

<?php
error_reporting(E_ALL);
if (!$xml = simplexml_load_file($MeuArquivo)) {
echo 'Não foi possivel carregar o arquivo indicado';
exit();
}
$node = $xml->xpath("//nfeConsultaNFDestResult/retConsNFeDest");
$node = $node[0];
$c = $node->cStat;
echo '<br>cStat = '.$c;

Roberto

Nelson Monteiro

unread,
Mar 19, 2014, 1:47:01 PM3/19/14
to nfe...@googlegroups.com
Roberto,

           Valeu Roberto, mas ainda não funcionou,

            Estou enviando o arquivo para voce mesmo ver que não funciona.

            Obrigado.
meuarquivo.xml

Roberto Machado

unread,
Mar 19, 2014, 4:13:26 PM3/19/14
to nfe...@googlegroups.com
Nelson;

Acredito que tenha um "BUG" na função "simplexml" mas dá para contornar removendo os "namespaces" do xml. Por isso nós usamos o DOM na API.

<?php
error_reporting(E_ALL);
$sfile = file_get_contents('./meuarquivo.xml');
$sfile = preg_replace('/xmlns[^=]*="[^"]*"/i', '', $sfile);
libxml_use_internal_errors(true);
echo '<PRE>';
echo htmlspecialchars($sfile);
echo '</PRE><BR>';
if (!$xml = simplexml_load_string($sfile)) {
echo 'Não foi possivel carregar o arquivo indicado';
echo '<BR>errors: <BR>';
foreach( libxml_get_errors() as $err ) {
var_dump($err);
}
exit();
}
$node = $xml->xpath("//nfeConsultaNFDestResult/retConsNFeDest");
$node = $node[0];
$c = $node->cStat;
echo '<br>cStat = '.$c;

Roberto

Nelson Monteiro

unread,
Mar 19, 2014, 4:26:56 PM3/19/14
to nfe...@googlegroups.com


Roberto, não tenho palavras para agradecer.

Eu fiz um teste, e acredito que seja isso, eu peguei o arquivo XML e retirei a palavra soap: deixando apenas a palavra Envelope, e ai funcionou
acredito que este documento não esta sendo reconhecido como XML devido a estes dois pontos no nome no Node (soap:Envelope)

Serei eternamente grato, por me ajudar.
Quando puder envie um CV seu para mim, vou precisar de um profissional como voce.

Abraços.
Reply all
Reply to author
Forward
0 new messages