Thema: Delphi XML auslesen

Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: XML auslesen

  Alt 8. Sep 2007, 09:04
Hallo Christian,

du benutzt bestimmt TXMLDocument aus der Palettenseite "Internet".

Dein XML-Dokument ist nicht optimal aufgebaut, aber ich nehme an, dass es vorgegeben ist.
Die Item-Elemente sind nicht geschlossen, wohl ein Fehler beim abtippen?

Hier mein Ansatz unter Verwendung deines korrigierten XML-Dokument:

Delphi-Quellcode:
procedure SetProperty(comp: TComponent; const propName: string; value: Variant);
var
  ppi: TypInfo.PPropInfo;
begin
  ppi := GetPropInfo(comp, propName);
  if Assigned(ppi) then
    SetPropValue(comp, propName, value);
end;

procedure Localize(comp: TComponent; doc: IXMLDocument);
var
  i: Integer;
  attr, elem, group: IXMLNode;
  groupName: string;
begin
  groupName := Copy(comp.ClassName, 2, Maxint);
  group := doc.DocumentElement.ChildNodes[groupName];
  if Assigned(group) then
  begin
    elem := group.ChildNodes[comp.Name];
    if Assigned(elem) then
      for i := 0 to Pred(elem.AttributeNodes.Count) do
      begin
        attr := elem.AttributeNodes[i];
        SetProperty(comp, attr.NodeName, attr.NodeValue);
      end;
  end;
end;

procedure TDemoForm.FormCreate(Sender: TObject);
var
  doc: IXMLDocument;
  nl: IXMLNode;
  i: Integer;
begin
  doc := LoadXMLData(Memo.Text);
  doc.Active := True;

  Localize(Button1, doc);
  // ...
end;
Besser wäre die Abbildung der Container-Hierarchie des Formulars, denn durch Gruppierung nach Klassen kannst du mit deinem XML-Dokument nur eindeutige Komponentennamen auflösen. Wäre die Abbildung vorhanden, dann könnte man Localize() zu einer rekursiven Funktion umgestalten und die ganze Form mit einem Aufruf lokalisieren.

Grüße vom marabu
  Mit Zitat antworten Zitat