Ok, es klappt noch nicht ganz wie ich es möchte. Das hier 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!
<collection>
<option>
Hi, ich bin Todd. Sehr erfreut!
<sentence>
Todd, kann ich dich um einen Gefallen bitten?
<collection>
<option>
Was darfs denn sein?
<sentence>
Ich habe meine Nase verloren, würdest du sie suchen?
<ende />
</sentence>
</option>
<option>
Kannst du das bitte nochmal wiederholen?
<move>Hier kommt dann eine Anweisung, wohin das Script sich bewegen soll, zB zurück zum ersten Sentence ("Hallo, ich bin Marry, der Clown!")</move>
</option>
<option>
Ich habe keine Zeit für sowas!
<ende />
</option>
</collection>
</sentence>
</option>
<option>
Lass mich in Ruhe! Ich habe keine Zeit!
<ende />
</option>
</collection>
</sentence>
</Gespraech_mit_dem_Clown>
</dialogsammlung>
So im Anhang habe ich ein Bild, wie das in den Treeview eingefügt wird. Und hier kommt meine Prozedur:
Delphi-Quellcode:
procedure TForm1.UpdateTree(Nodes: IXMLDOMNodeList; ParentNode: TTreeNode);
var
i, j: Integer;
aTree, NewParent: TTreeNode;
subNode: IXMLDOMNode;
begin
for i := 0 to Nodes.length - 1 do
begin
subNode := Nodes.item[i];
aTree := DialogTree.Items.AddChild(ParentNode, subNode.Text);
//Präfixe hinzufügen
aTree.ImageIndex := 0;
for j := 1 to high(PRAEFIXE) do
if subNode.nodeName = PRAEFIXE[j] then
aTree.ImageIndex := j;
if subNode.nodeName = 'collection' then
aTree.Text := 'Collection'
else
if subNode.nodeName = 'ende' then
aTree.Text := 'Ende';
//Präfixe Ende
if subNode.childNodes.length > 0 then
begin
NewParent := aTree;
UpdateTree(subNode.childNodes, NewParent);
end;
end;
end;
So, ich denke ihr seht wo das Problem ist. Die ganzen Sachen werden alle verdoppelt, dadurch dasss sie nochmal als SubNode angezeigt werden. Außerdem wird nicht nur der Text des aktuellen Nodes, sondern auch der aller Subnodes hinzugefügt.
Wie lässt sich das verhindern?
Stehe da etwas auf dem Schlauch :-\