terça-feira, 28 de dezembro de 2010

Lendo o XML com o TXMLDocument


begin
  vXMLDoc := TXMLDocument.Create(self);
  // le os dados do arquivo salvo
  vXMLDoc.LoadFromFile('c:\tempo\navcom\nfe\retConsLote_001c.xml');
  // ou simplesmente pega a string retWS que contem o XML retorno
  // vXMLDoc.xml.Add(retWS);
  // vXMLDoc.active = true;
 
  // ou para ler o arquivo do recibo da NFe
  motivo := vXMLDoc.DocumentElement.ChildNodes['xMotivo'].text;
  NodePai := vXMLDoc.DocumentElement.ChildNodes.FindNode('protNFe');
 
  // posiciona no primeiro item (o velho first);
  NodePai.ChildNodes.First;
 
  // repeat....until  (como o velho while condicao)
  // repete enquanto encontrar dados de protocolo no arquivo.
  repeat
     NodeSec := NodePai.ChildNodes.FindNode('infProt');
     chaveacesso := NodeSec.ChildNodes['chNFe'].text;
     protocolo := NodeSec.ChildNodes['nProt'].text;
     datahora := NodeSec.ChildNodes['dhRecbto'].text;
     motivo := NodeSec.ChildNodes['xMotivo'].text;
 
     // inserido aqui apenas para testar mostrando os dados no MEMO.
     //if protocolo  '' then
      Memo4.Lines.Add( chaveacesso+'-> '+protocolo+' ---- '+datahora+' - '+motivo );
 
     // esse seria o Next
     NodePai := NodePai.NextSibling;
 
  until NodePai = nil;
end;

Nenhum comentário: