Não interromper loop ao carregar XML com erro

Delphi

16/09/2025

Pessoal, tenho uma rotina que lê um diretório com varios arquivos XML.
A rotina está dentro de um TRY EXCEPT com um REPEAT para que eu possa varrer todo o diretorio.

O erro que o delphi retorna é caracter invalido na primeira linha e ocorre logo de cara, ao carregar o arquivo
XMLDocument1.LoadFromFile('C:\XML\nota com erro.XML');


Texto da linha 1
<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="4.00"


Alguém poderia me ajudar a contornar essa situação, ignorando esse erro e partir para o proximo arquivo?
Renan

Renan

Curtidas 0

Melhor post

Arthur Heinrich

Arthur Heinrich

16/09/2025

Adicione outro try/except para tratar o erro no LoadFromFile:

var
  Files: TArray<string>;
  FileName: string;
  XMLDoc: TXMLDocument;
begin
  Files := TDirectory.GetFiles('C:\\\\XML', '*.xml');
 
  XMLDoc := TXMLDocument.Create(nil);
   try
     for FileName in Files do
      begin
        ShowMessage('Processando o arquivo: ' + FileName);
        try
          XMLDoc.LoadFromFile(FileName); //aqui ocorre o erro e o loop é interrompido
 
          if XMLDoc.Active then
          begin
            if assigned(XMLDoc.DocumentElement) then
              ShowMessage('Nome do nó raiz: ' + XMLDoc.DocumentElement.NodeName);
          end;
        except
          on E: Exception do
            ShowMessage(''Erro: '' + E.Message );
        end;
      end;
   finally
     XMLDoc.Free;
   end;

GOSTEI 1

Mais Respostas

Renan

Renan

16/09/2025

Basicamente a rotina é assim

var
  Files: TArray<string>;
  FileName: string;
  XMLDoc: TXMLDocument;
begin
  Files := TDirectory.GetFiles('C:\\XML', '*.xml');

  XMLDoc := TXMLDocument.Create(nil);
   try
     for FileName in Files do
      begin
        ShowMessage('Processando o arquivo: ' + FileName);
        XMLDoc.LoadFromFile(FileName); //aqui ocorre o erro e o loop é interrompido

        if XMLDoc.Active then
        begin
          if assigned(XMLDoc.DocumentElement) then
            ShowMessage('Nome do nó raiz: ' + XMLDoc.DocumentElement.NodeName);
        end;
      end;
   finally
     XMLDoc.Free;
   end;
GOSTEI 0
POSTAR