TString in XML speichern.

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

TString in XML speichern.

Beitrag von Mathias »

Ich habe Funktionen geschrieben, mit denen man einen TStrings/TStringList in eine XML-Datei schreiben kann.
Ist das der übliche Weg ?

Code: Alles auswählen

const
    XMLConfigFile = 'config.xml'; // Bei normalen Anwendungen
...
procedure LoadStrings_from_XML(const Key: string; sl: TStrings);
var
  Cfg: TXMLConfig;
  ct, i: integer;
  s: string;
begin
  Cfg := TXMLConfig.Create(nil);
  Cfg.Filename := XMLConfigFile;
  ct := Cfg.GetValue(Key + '/Count', 0);
  sl.Clear;
  for i := 0 to ct - 1 do begin
    s := Cfg.GetValue(Key + '/Item' + i.ToString+'/value', '');
    sl.Add(s);
  end;
  Cfg.Free;
end;

procedure SaveStrings_to_XML(const Key: string; sl: TStrings);
var
  Cfg: TXMLConfig;
  i: integer;
begin
  Cfg := TXMLConfig.Create(nil);
  Cfg.Filename := XMLConfigFile;
  Cfg.SetValue(Key + '/Count', sl.Count);
  for i := 0 to sl.Count - 1 do begin
    Cfg.SetValue(Key + '/Item' + i.ToString+'/value', sl[i]);
  end;
  Cfg.Free;
end;
Die XML sieht so aus:

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8"?>
<CONFIG>
  <Serial_Monitor_Form>
    <ComboBox_Send_Text Count="4">
      <Item0 value="test"/>
      <Item1 value="Hello World !"/>
      <Item2 value="Hello"/>
      <Item3 value="test"/>
    </ComboBox_Send_Text>
  </Serial_Monitor_Form>
</CONFIG>
Aber es gibt noch eine XML-Version, bei dem Count weglassen wird, das sieht etwa so aus:

Code: Alles auswählen

...
    <ComboBox_Send_Text>
      <Item value="test"/>
      <Item value="Hello World !"/>
      <Item value="Hello"/>
      <Item value="test"/>
    </ComboBox_Send_Text>
...
Ist sowas mit TXMLConfig überhaupt möglich ?
Die neueren lpi und lpk Dateien sehen auch so ähnlich aus.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten