type
TDest = record
FNumber: String;
FChecked: Boolean;
end;
TDNS = record
FName: String;
FInclude: Integer;
FDest: array of TDest;
end;
var
DNS: array of TDNS;
procedure TForm1.SaveToXML(const APath: String);
var
FXML: TXMLConfig;
Path, SubPath: String;
DNSCnt: Integer;
DestCnt: Integer;
I, J: Integer;
begin
FXML := TXMLConfig.CreateClean(APath);
try
DNSCnt := Length(DNS);
FXML.SetDeleteValue('DNSCount/Value', DNSCnt, 0);
for I := 0 to DNSCnt - 1 do
begin
Path := 'DNS' + IntToStr(I) + '/';
DestCnt := Length(DNS[I].FDest);
FXML.SetDeleteValue(Path + 'Name', DNS[I].FName, '');
FXML.SetDeleteValue(Path + 'Include', DNS[I].FInclude, 0);
FXML.SetDeleteValue(Path + 'DestCnt', DestCnt, 0);
for J := 0 to DestCnt - 1 do
begin
SubPath := Path + 'Destination' + IntToStr(J) + '/';
FXML.SetDeleteValue(SubPath + 'Number', DNS[I].FDest[J].FNumber, '');
FXML.SetDeleteValue(SubPath + 'Checked', DNS[I].FDest[J].FChecked, False);
end;
end;
FXML.Flush;
finally
FXML.Free;
end;
end;
procedure TForm1.LoadFromXML(const APath: String);
var
FXML: TXMLConfig;
Path, SubPath: String;
DNSCnt: Integer;
DestCnt: Integer;
I, J: Integer;
begin
if not FileExists(APath) then
Exit;
FXML := TXMLConfig.Create(APath);
try
DNSCnt := FXML.GetValue('DNSCount/Value', 0);
SetLength(DNS, DNSCnt);
for I := 0 to DNSCnt - 1 do
begin
Path := 'DNS' + IntToStr(I) + '/';
DNS[I].FName := FXML.GetValue(Path + 'Name', '');
DNS[I].FInclude := FXML.GetValue(Path + 'Include', 0);
DestCnt := FXML.GetValue(Path + 'DestCnt', 0);
SetLength(DNS[I].FDest, DestCnt);
for J := 0 to DestCnt - 1 do
begin
SubPath := Path + 'Destination' + IntToStr(J) + '/';
DNS[I].FDest[J].FNumber := FXML.GetValue(SubPath + 'Number', '');
DNS[I].FDest[J].FChecked := FXML.GetValue(SubPath + 'Checked', False);
end;
end;
finally
FXML.Free;
end;
end;