Fórum Não interromper loop ao carregar XML com erro #623818
16/09/2025
0
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
Texto da linha 1
Alguém poderia me ajudar a contornar essa situação, ignorando esse erro e partir para o proximo arquivo?
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
Curtir tópico
+ 0
Responder
Post mais votado
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;
Arthur Heinrich
Responder
Gostei + 1
Mais Posts
16/09/2025
Renan
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;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)