So, habe im Titel genanntes versucht. Habe mir auch einige Threads hier durchgelesen aber das nicht richtig verstanden, bzw konnte die Beispiele nicht ausführen.
Habe versucht das ganze rekursiv auszuführen und folgenden Code bekommen.
Delphi-Quellcode:
procedure TForm1.UpdateTree(Nodes: IXMLDOMNodeList);
var
i: Integer;
aTree: TTreeNode;
begin
for i := 0 to Nodes.length - 1 do
begin
DialogTree.Items.AddChild(DialogTree.Selected, Nodes.item[i].nodeValue);
if Nodes.item[i].childNodes.length > 0 then
begin
DialogTree.Selected := DialogTree.Selected.Item[0];
UpdateTree(Nodes.item[i].childNodes);
end;
end;
end;
procedure TForm1.GetDialog(DialogName: String);
var
i, j: Integer;
NodeList: IXMLDOMNodeList;
TreeNode: TTreeNode;
begin
DialogTree.Items.Clear;
Nodelist := xmlDoc.documentElement.selectNodes(DialogName);
DialogTree.Items.BeginUpdate;
DialogTree.Items.AddFirst(nil, DialogName);
DialogTree.Selected := DialogTree.TopItem;
UpdateTree(Nodelist);
DialogTree.Items.EndUpdate;
end;
Ich gehe also immer wieder die Länge der NodeList durch, die ich aus dem
XML Dokument habe. Dann füge ich jeweils ein Item als Child des gewählten Items des Treeviews hinzu, prüfe ob noch ChildNodes in der NodeList vorhanden sind und wenn, dann setze ich das neu hinzugefügte TreeViewItem selected und rufe die Prozedur nochmal mit den ChildNodes der NodeList aus.
Mist das is schwer zu erklären, ich hoffe ihr versteht was ihc meine. Es klappt aber nicht. Er fügt die Items wild durcheinander hinzu.
Das ist meine
XML-Datei:
Zitat:
<?
xml version='1.0' encoding='ISO-8859-1'?>
<dialogsammlung>
<Gespraech_mit_dem_Clown>
<sentence>Hallo, ich bin Marry, der Clown</sentence>
<option>Hi, ich bin Todd. Sehr erfreut!</option>
<option>Das interessiert mich doch nicht!</option>
</Gespraech_mit_dem_Clown>
<Gespraech_mit_Lisa>
<sentence>Hi, ich bin Lisa, das Supermodel</sentence>
<option>Du hast wirklich wahnsinnig große...Augen!</option>
<option>Sorry, aber ich habe keine Zeit für sowas. Ich muss die Welt retten!</option>
</Gespraech_mit_Lisa>
</dialogsammlung>
Da diese aber unbeschränkt viele Verschachtelungen haben kann, stellt sich das alles für mich als ein Problem dar.
Weiss wer wo der Fehler liegt? Wie mach ichs besser?
Danke schonmal!