Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ler arquivo XML no delphi


marcosesser

Pergunta

Bom dia, estou com um problema e gostaria de saber se podem me ajudar,

sou iniciante em Delphi e estou tentando desenvolver uma aplicação que leia determinadas tags de um arquivo xml, a tag é a <chNFe> e o arquivo que eu quero ler é o seguinte:

<retConsNFeDest xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01">
	<tpAmb>1</tpAmb>
	<verAplic>1.1.1</verAplic>
	<cStat>138</cStat>
	<xMotivo>Documento localizado para o destinatario</xMotivo>
	<dhResp>2017-03-20T17:40:12</dhResp>
	<indCont>1</indCont>
	<ultNSU>20691137709</ultNSU>
		<ret>
			<resNFe NSU="20690776764">
				<chNFe>41170376125244000162550070010199011009987875</chNFe>
				<CNPJ>76125244000162</CNPJ>
				<xNome>MOINHO ARAPONGAS S/A</xNome>
				<IE>6280220629</IE>
				<dEmi>2017-03-06</dEmi>
				<tpNF>1</tpNF>
				<vNF>89.60</vNF>
				<digVal>2RshQue3OqwQa3w66e7L7VMip/o=</digVal>
				<dhRecbto>2017-03-06T14:46:15</dhRecbto>
				<cSitNFe>1</cSitNFe>
				<cSitConf>4</cSitConf>
			</resNFe>
		</ret>
		<ret>
			<resNFe NSU="20690776808">
				<chNFe>41170376125244000162550070010199021007131377</chNFe>
				<CNPJ>76125244000162</CNPJ>
				<xNome>MOINHO ARAPONGAS S/A</xNome>
				<IE>6280220629</IE>
				<dEmi>2017-03-06</dEmi>
				<tpNF>1</tpNF>
				<vNF>110.85</vNF>
				<digVal>bYOSFXKE79okxtepvod/qG4saZE=</digVal>
				<dhRecbto>2017-03-06T14:46:15</dhRecbto>
				<cSitNFe>1</cSitNFe>
				<cSitConf>4</cSitConf>
			</resNFe>
		</ret>
		<ret>
			<resNFe NSU="20690776826">
				<chNFe>41170376125244000162550070010199031006464116</chNFe>
				<CNPJ>76125244000162</CNPJ>
				<xNome>MOINHO ARAPONGAS S/A</xNome>
				<IE>6280220629</IE>
				<dEmi>2017-03-06</dEmi>
				<tpNF>1</tpNF>
				<vNF>1366.38</vNF>
				<digVal>A6gHWT8RCSMVJXcWV9G0w0eTzZw=</digVal>
				<dhRecbto>2017-03-06T14:46:15</dhRecbto>
				<cSitNFe>1</cSitNFe>
				<cSitConf>4</cSitConf>
			</resNFe>
		</ret>
</retConsNFeDest>

 

já li algumas coisas sobre o TXMLDocument no delphi, mas não sei bem como utilizar, eu utilizei um modelo que encontrei mas ele pega apenas a primeira ocorrência da tag.

Desde já obrigado.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

O código que eu utilizo é o seguinte:

procedure TForm1.Button2Click(Sender: TObject);
begin
XMLDocument1.LoadFromFile('D:\20-03-2017-Copia.xml');
XMLDocument1.Active := True;

Memo1.Lines.Add(XMLDocument1.ChildNodes['retConsNFeDest'].ChildNodes['ret'].ChildNodes['resNFe'].ChildNodes['chNFe'].NodeValue);
end;

Só reforçando que eu utilizo o componente TXMLDocument.

Editado por marcosesser
complemento de resposta
Link para o comentário
Compartilhar em outros sites

  • 0

Uma das formas de se obter o resultado

 

procedure TForm1.Button1Click(Sender: TObject);
var i : integer; EntryNode:IXmlNode;
begin

   XMLDocument1.LoadFromFile('D:\20-03-2017-Copia.xml');
   XMLDocument1.Active := True;
   EntryNode := xmldocument1.DocumentElement;

   for i := 0 to EntryNode.ChildNodes.Count -1 do
      memo1.Lines.Add( EntryNode.ChildNodes[i].xml);

   for i := 0 to memo1.Lines.Count -1 do
      begin
         if pos('chNFe',memo1.Lines.Strings[i])>0 then
            memo2.Lines.add(copy(memo1.lines.Strings[i],8,44));
      end;

end;

Memo2
41170376125244000162550070010199011009987875
41170376125244000162550070010199021007131377
41170376125244000162550070010199031006464116

 

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
14 minutos atrás, Jhonas disse:

Uma das formas de se obter o resultado

 


procedure TForm1.Button1Click(Sender: TObject);
var i : integer; EntryNode:IXmlNode;
begin

   XMLDocument1.LoadFromFile('D:\20-03-2017-Copia.xml');
   XMLDocument1.Active := True;
   EntryNode := xmldocument1.DocumentElement;

   for i := 0 to EntryNode.ChildNodes.Count -1 do
      memo1.Lines.Add( EntryNode.ChildNodes[i].xml);

   for i := 0 to memo1.Lines.Count -1 do
      begin
         if pos('chNFe',memo1.Lines.Strings[i])>0 then
            memo2.Lines.add(copy(memo1.lines.Strings[i],8,44));
      end;

end;

Memo2
41170376125244000162550070010199011009987875
41170376125244000162550070010199021007131377
41170376125244000162550070010199031006464116

 

abraço

 

Jhonas, deu super certo essa rotina, ela vai ser perfeita pro que eu quero fazer.

obrigado mesmo.

Link para o comentário
Compartilhar em outros sites

  • 0

Como eu disse, aquela era uma da formas

vou colocar mais 2 para voce ver a diferença:

procedure TForm1.Button2Click(Sender: TObject);
var i,x : integer; EntryNode:IXmlNode; s : string;
begin

   XMLDocument1.LoadFromFile('D:\20-03-2017-Copia.xml');
   XMLDocument1.Active := True;
   EntryNode := xmldocument1.DocumentElement;

   for i := 0 to EntryNode.ChildNodes.Count -1 do
      begin
         s := EntryNode.ChildNodes[i].xml;
         x := pos('<chNFe>',s);
         if x > 42 then
            memo1.Lines.add(copy(s,x+7,44));
      end;

end;

end;

outra forma

procedure TForm1.Button1Click(Sender: TObject);
var i,x : integer; EntryNode, EntryType :IXmlNode; s : string;
begin

   XMLDocument1.LoadFromFile('D:\20-03-2017-Copia.xml');
   XMLDocument1.Active := True;
   EntryNode := xmldocument1.DocumentElement;

  EntryType := EntryNode.ChildNodes.First;
  for i := 0 to EntryNode.ChildNodes.Count -1 do
     begin
       if (EntryType.NodeName = 'ret') then
          Memo1.Lines.Add(EntryType.ChildNodes.Nodes[0].ChildNodes.Nodes[0].text);
       EntryType := EntryType.NextSibling;
     end;

end;

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...