Muitos ainda têm dúvida de como ler o XML usando o TXMLDocument; publiquei abaixo mais dois códigos exemplo, o primeiro para ler o arquivo de retorno da consulta de Status do Serviço da NF-e e o segundo para ler o arquivo de retorno da consulta do recibo de envio do lote da NF-e. Reparem que são poucas modificações em relação aos exemplos anteriores, usem esses exemplos também para entender melhor como usar o TXMLDocument e ganhe maior liberdade para trabalhar com qualquer arquivo XML.

Ex.01: Lendo o XML de retorno da consulta de Status de Serviço da NF-e:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var vXMLDoc: TXMLDocument;
    NodeRec, NodeRec2: IXMLNode;
    cStat, dhRecebto, motivo: WideString;
begin
  vXMLDoc := TXMLDocument.Create(self);
  Try
  // abre o XML
  vXMLDoc.LoadFromFile('c:\tempo\navcom\nfe\consStatServ_001.xml');
 
  // Mostra no memo (aqui apenas para exemplificar)
  Memo4.lines.Add( VXMLDoc.XML.Text +#13+#13 );
 
  // Le os dados contido nó principal 
  with vXMLDoc.DocumentElement  do
  begin
    motivo :=    ChildNodes['xMotivo'].text;
    cStat  :=    ChildNodes['cStat'].text;
    dhRecebto := ChildNodes['cStat'].text;
  end;
 
  // Mostra os dados no memo (apenas exemplificando) 
  Memo4.Lines.Add('-----------------------------------------------');
  Memo4.Lines.Add( cStat+' ---- '+motivo+' - '+dhRecebto );
 
  finally
     VXMLDoc.Free;
  end;
end;

Exemplo 02: Lendo o XML de retorno da consulta do recibo de envio da NF-e

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var vXMLDoc: TXMLDocument;
    NodeRec, NodeRec2: IXMLNode;
    cStat, nRec, xMotivo, cStat2, nProt, xMotivo2, dhRecbto: WideString;
begin
  vXMLDoc := TXMLDocument.Create(self);
  try  
  vXMLDoc.LoadFromFile('c:\tempo\navcom\nfe\retConsLote_001.xml'); //EnviNFe.xml');
 
  Memo.lines.Add( '-------------------------------------------------');
  Memo.lines.Add( VXMLDoc.XML.Text +#13+#13 );
 
  // Lê os dados do Nó principal
  With vXMLDoc.DocumentElement do
  begin
     nRec := ChildNodes['nRec'].text;
     cStat:= ChildNodes['cStat'].text;
     xMotivo := ChildNodes['xMotivo'].text;
  end;
 
  // Lê os dados de "protNFe"
  NodeRec := vXMLDoc.DocumentElement.ChildNodes.FindNode('protNFe');
  NodeRec2:= NodeRec.ChildNodes.FindNode('infProt');
  dhRecbto := NodeRec2.ChildNodes['dhRecbto'].text;     // posso ler assim
  cStat2   := NodeRec2.ChildNodes['cStat'].text;
  nProt    := NodeRec2.ChildNodes['nProt'].text;
  xMotivo2 := NodeRec2.ChildNodes['xMotivo'].text;
 
  // Mostra os dados (apenas exemplificando aqui)
  Memo.Lines.Add('Dados do Recibo -------------------------------------------');
  Memo.Lines.Add(
  'Recibo N.: '+nRec+#13+#10 +
  'Status: '+cStat+#13+#10 +
  'Motivo: '+xMotivo+#13+#10 );
  Memo.Lines.Add('Dados do Protocolo -------------------------------------------');
  Memo.Lines.Add(
  'Motivo: '+xMotivo2+#13+#10+
  'Status: '+cStat2+#13+#10+
  'Protocolo de autorização N.: '+nProt+#13+#10+
  'Data Recebimento: '+dhRecbto);  
  finally
     VXMLDoc.Free;
  end;   
end;

Tags: ,