Ler arquivo XML eSocial

Delphi

XML

17/04/2020

Prezados Senhores,
Estou lendo um arquivo XML e tenho que pegar o conteúdo da seguinte tag:
-<evento Id="ID1332642270000002020033110500400026">
pois nela é que posso pegar a matrícula do funcionário nas últimas 5 posições (00026)

Atenciosamente

Rogerio Barbosa
Rogerio Ferreira

Rogerio Ferreira

Curtidas 0

Respostas

Raimundo Pereira

Raimundo Pereira

17/04/2020

Prezados Senhores,
Estou lendo um arquivo XML e tenho que pegar o conteúdo da seguinte tag:
-<evento Id="ID1332642270000002020033110500400026">
pois nela é que posso pegar a matrícula do funcionário nas últimas 5 posições (00026)

Atenciosamente

Rogerio Barbosa


Fiz um exemplo muito rápido, veja se te ajuda.

Veja o resultado na imagem abaixo
https://uploaddeimagens.com.br/imagens/ZYottxI

uses
System.StrUtils,

private
{ Private declarations }
function RetornaNumeros(const S: string): string;
function CopiaReversa(S: String; Index, Count : Integer) : String;


function TForm2.CopiaReversa(S: String; Index, Count : Integer) : String;
begin
Result := ReverseString(S);
Result := Copy(Result, Index, Count);
Result := ReverseString(Result);
end;

function TForm2.RetornaNumeros(const S: string): string;
var
vText : PChar;
begin
vText := PChar(S);
Result := '';

while (vText^ <> #0) do
begin
{$IFDEF UNICODE}
if CharInSet(vText^, ['0'..'9']) then
{$ELSE}
if vText^ in ['0'..'9'] then
{$ENDIF}
Result := Result + vText^;

Inc(vText);
end;
end;


Aqui ocorre o processo de leitura e extração

procedure TForm2.Btn_LerXMLClick(Sender: TObject);
var i : integer; EntryNode:IXmlNode;
Res:string;
begin
memo1.Clear;


XMLDocument1.LoadFromFile(JvFilenameEdit1.Text);
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(Edt_TAG.Text,memo1.Lines.Strings[i])>0 then

Res:= Trim((copy(memo1.lines.Strings[i],Length(Edt_TAG.Text),StrToInt(Edt_last_Position.Text))));

end;
Edt_Valor_TAG.Text:=RetornaNumeros(res);
EDT_5_PO.Text:=CopiaReversa(Edt_Valor_TAG.Text,1,5);

end;
GOSTEI 0
POSTAR