Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, pessoal! Eu preciso realizar a leitura de um arquivo XML e buscar duas tags (variáveis), porém não consigo chegar até duas tags que eu preciso.
Segue estrutura do arquivo XML:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeAutorizacao">
<cUF>31</cUF>
<versaoDados>3.10</versaoDados>
</nfeCabecMsg>
</soap:Header>
<soap:Body>
<nfeAutorizacaoLoteResult xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeAutorizacao">
<retEnviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10">
<tpAmb>2</tpAmb>
<verAplic>14.0.5</verAplic>
<cStat>104</cStat>
<xMotivo>Lote processado</xMotivo>
<cUF>31</cUF>
<dhRecbto>2016-07-20T08:21:56-03:00</dhRecbto>
<protNFe versao="3.10">
<infProt>
<tpAmb>2</tpAmb>
<verAplic>14.0.5</verAplic>
<chNFe>31160725641127000110550010000001221160721091</chNFe>
<dhRecbto>2016-07-20T08:21:56-03:00</dhRecbto>
<digVal>aXGUCUIaU2NcWxTCh97tG6xp/vQ=</digVal>
<cStat>732</cStat>
<xMotivo>Rejeicao: CFOP de operacao interestadual e idDest <>2</xMotivo>
</infProt>
</protNFe>
</retEnviNFe>
</nfeAutorizacaoLoteResult>
</soap:Body>
</soap:Envelope>
Eu preciso das TAGS:
<cStat>732</cStat>
<xMotivo>Rejeição: CFOP de Operação Interestadual e idDest
Com isto, preciso como resposta isto: 732 - Rejeição: CFOP de operação interestadual e idDest <> 2
Podem me ajudar?
$xml = simplexml_load_file("Arquivo.xml");
foreach($xml -> protNFe as $Key => $xml) {
$status = utf8_decode($xml -> infProt -> cStat);
$motivo = utf8_decode($xml -> infProt -> xMotivo);
}Boa Dica, obrigado. @ESerra.
Na linha do $le = str_ireplace(['SOAP-ENV:', 'SOAP:'], '', file_get_contents('Arquivo.xml')); está com erro aqui pra mim. Vou verificar e posto pra cá a resposta!
;)
Valeu pela ajuda
['SOAP-ENV:', 'SOAP:'] é um array, dependendo da versão do seu PHP você terá que usar array(...) como sintaxe.
Isto mesmo, acabei de ver. Vou tratá-los como array. Terminando posto aqui.
ESerra,
Usei este código com base no que você me enviou:
$new_xml = str_ireplace('soap:Envelope ','',file_get_contents("backup/xml/nfe/".$tipo_ambiente."/temporarias/".$dataemissao."/".$idLote."-retEnviNFe.xml"));
$new_xml = str_ireplace('soap:','',$new_xml);
$xml = simplexml_load_string($new_xml);
echo 'cStat'.$xml->Body->nfeAutorizacaoLoteResult->retEnviNFe->protNFe->infProt->cStat;
echo '<br>Motivo '.$xml->Body->nfeAutorizacaoLoteResult->retEnviNFe->protNFe->infProt->xMotivo;
Porém, tenho como retorno uma String;
cStat
Motivo
2 14.0.5 104 Lote processado 31 2016-07-20T10:24:44-03:00 2 14.0.5 31160725641127000110550010000001221160721091 2016-07-20T10:24:44-03:00 3WM/QnT0NAZvT7R81R8QhSRthp0= 732 Rejeicao: CFOP de operacao interestadual e idDest <>2
Eu não tenho as tags. Tem uma ideia de como prosseguir?
Tem uma ideia de como prosseguir?
Tchê, eu te dei o script prontinho, copiar/colar e usar... até assim fica difícil? Complicado...
$new_xml = str_ireplace('SOAP-ENV:','',file_get_contents("Arquivo.xml"));
$new_xml = str_ireplace('SOAP:','',$new_xml);
$xml = simplexml_load_string($new_xml);
echo 'cStat'.$xml->Body->nfeAutorizacaoLoteResult->retEnviNFe->protNFe->infProt->cStat;
echo '<br>Motivo '.$xml->Body->nfeAutorizacaoLoteResult->retEnviNFe->protNFe->infProt->xMotivo;
Ou então simplesmente:
$new_xml = str_ireplace(array('SOAP-ENV:', 'SOAP:'), '', file_get_contents('Arquivo.xml'));
$xml = simplexml_load_string($new_xml);
echo 'cStat'.$xml->Body->nfeAutorizacaoLoteResult->retEnviNFe->protNFe->infProt->cStat;
echo '<br>Motivo '.$xml->Body->nfeAutorizacaoLoteResult->retEnviNFe->protNFe->infProt->xMotivo;Obrigado, desculpe pela falta de atenção!
Isso é SOAP XML... uma das maneiras de parsear: