Beto eu fiz para importar dados da NF-e XML mas a idéia é a mesma é só mudar os nomes do campo...
Obs.: Sempre pego informações diretamente do componente não sendo necessário ler o XML... mas caso queira segue o meu exemplo abaixo...
var
vXMLDoc: TXMLDocument;
NodePrim, NodePai, NodePriEmi, NodePaiEmi, NodeCabecalho, NodePrim2,
NodePai2, NodePai3, Nocab2, NodePrim3, NodePai4, NodePai5, Nocab3,
NodePrim4, NodePai6, NodePai7, NodePai8, NodePai9, Nocab4 : IXMLNode;
AuxChave, AuxData, AuxPesoB, AuxVNF : String;
begin
vXMLDoc := TXMLDocument.Create(self);
AbrirXML.Title := 'Selecione o XML';
AbrirXML.DefaultExt := '*.xml';
AbrirXML.Filter := 'Arquivos XML (*.xml)|*.xml|Arquivos XML (*.xml)|*.xml|Todos os Arquivos (*.*)|*.*';
if AbrirXML.Execute then begin
vXMLDoc.LoadFromFile(AbrirXML.FileName); //Le Arquivo Recibo XML');
vXMLDoc.Active := True;
NodePrim := vXMLDoc.DocumentElement.ChildNodes.FindNode('protNFe');
NodePai := NodePrim.ChildNodes.FindNode('infProt');
NodePriEmi := vXMLDoc.DocumentElement.ChildNodes.FindNode('NFe');
NodePaiEmi := NodePriEmi.ChildNodes.FindNode('infNFe');
NodeCabecalho := NodePaiEmi.ChildNodes['ide'];
NodePrim2 := vXMLDoc.DocumentElement.ChildNodes.FindNode('NFe');
NodePai2 := NodePrim2.ChildNodes.FindNode('infNFe');
NodePai3 := NodePai2.ChildNodes.FindNode('transp');
Nocab2 := NodePai3.ChildNodes['vol'];
NodePrim3 := vXMLDoc.DocumentElement.ChildNodes.FindNode('NFe');
NodePai4 := NodePrim3.ChildNodes.FindNode('infNFe');
NodePai5 := NodePai4.ChildNodes.FindNode('total');
Nocab3 := NodePai5.ChildNodes['ICMSTot'];
NodePrim4 := vXMLDoc.DocumentElement.ChildNodes.FindNode('NFe');
NodePai6 := NodePrim4.ChildNodes.FindNode('infNFe');
NodePai7 := NodePai6.ChildNodes.FindNode('transp');
Nocab4 := NodePai7.ChildNodes.FindNode('vol');
AuxChave := NodePai.ChildNodes['chNFe'].text;
AuxChave := FormataChave(AuxChave);
txtChave.Text := Trim(AuxChave);
txtChaveExit(Self);
AuxData := NodeCabecalho.ChildNodes['dEmi'].text;
txtEmissao.Text := Copy(AuxData,9,2)+'/'+Copy(AuxData,6,2)+'/'+Copy(AuxData,1,4);
AuxPesoB := Nocab2.ChildNodes['pesoB'].text;
AuxPesoB := StringReplace(AuxPesoB, '.', ',', [rfReplaceAll]);
txtPBruto.Text := FormatFloat('###,##0.000', StringFloat(AuxPesoB));
txtPCalc.Text := Trim(txtPBruto.Text);
AuxVNF := Nocab3.ChildNodes['vNF'].text;
AuxVNF := StringReplace(AuxVNF, '.', ',', [rfReplaceAll]);
txtVlNota.Text := FormatFloat('###,##0.00', StringFloat(AuxVNF));
txtVolume.Text := FormatFloat('###,##0.000', StringFloat(Nocab4.ChildNodes['qVol'].text));
txtVlNota.SetFocus;
end;
Espero que tenha te ajudado...