Hi
Danke nochmal, klappt soweit alles, nur mein Ansatz für das Durchsuchen scheitert immer. Ich habe mir gedacht, ich verbinde einfach deinen Vorschlag für das Suchen der einzelnen Datensätze und den alten Code, von der Theorie klappt es auch, und praktisch auch zu ca. 50%
Doch, 2 Probleme bleiben offen, guck es dir an:
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var
daten: IXMLNodeList;
i,j: integer;
subNode: IXMLNode;
node: IXMLNode;
begin
j := 0;
Tabelle.Items.Clear;
Tabelle.Items.BeginUpdate;
daten := XMLDoc.documentElement.selectNodes('daten/name');
for i:=0 to daten.length -1 do begin
if(Edit1.Text = daten.Item[i].Text) then
begin
subNode := daten.item[i].ParentNode('name');
Tabelle.Items.Add;
Tabelle.Items[j].Caption := subNode.Text;
with Tabelle.Items[j].SubItems do begin
subNode := daten.item[i].selectSingleNode('klasse');
if subNode <> nil then
Add(subNode.Text);
subNode := daten.item[i].selectSingleNode('projekt1');
if subNode <> nil then
Add(subNode.Text);
subNode := daten.item[i].selectSingleNode('projekt2');
if subNode <> nil then
Add(subNode.Text);
j := j+1;
end;
end;
break;
end;
Tabelle.Items.EndUpdate;
end;
Das Problem ist, wenn ich bei
Tabelle.Items[j].Caption := subNode.Text;
Jetzt := 'Hallo' machen würde, würde es gehen, doch so geht's leider nicht, denn in der subNode wird nichts aufgenommen, da ich am Anfang ja leider
daten := XMLDoc.documentElement.selectNodes('daten/name');
machen muss, sonst würde es bis dahin wieder nicht funktionieren. Doch er findet jetzt ja keine Node mit Namen, da die schon geladen is, oder irgendwie was in der Richtung, das ist auf jeden Fall Fehler 1, den ich gerade versuche zu beheben.
Fehler 2 wäre dann, dass ich gerne hätte, dass man auch nur "Na" in das Edit Feld eingeben kann und dann schon alle Daten, die "Na" drin haben angezeigt werden, und je mehr man vom Namen eingibt, desto mehr beschränkt sich die Auswahl.
Ach und eine kleine Frage am Rande, was heißt
IMHO???
Edit:
Ok, das eine hätte ich ja behoben, wenn ich statt
subNode := daten.item[i].ParentNode('name');
subNode := daten.item[i];
machen würde, aber dann besteht das Prob ja weiterhin, da ich dann nicht auf Klasse etc. zugreifen kann, da ich schon zu tief in den Nodes drin bin.
Edit2:
Ok, nächsten Fehler behoben:
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var
daten, daten2: IXMLNodeList;
i, mu: integer;
subNode: IXMLNode;
begin
Tabelle.Items.Clear;
Tabelle.Items.BeginUpdate;
daten := XMLDoc.documentElement.selectNodes('daten');
for i:=0 to daten.Length do begin
mu := Pos (Edit1.Text, daten.Item[i].Text);
if(mu <> 0) then
begin
daten2 := XMLDoc.DocumentElement.SelectNodes('daten');
subNode := daten.item[i].SelectSingleNode('name');
Tabelle.Items.Add;
Tabelle.Items[i].Caption := subNode.Text;
with Tabelle.Items[i].SubItems do begin
subNode := daten.item[i].SelectSingleNode('klasse');
if subNode <> nil then
Add(subNode.Text);
subNode := daten.item[i].selectSingleNode('projekt1');
if subNode <> nil then
Add(subNode.Text);
subNode := daten.item[i].selectSingleNode('projekt2');
if subNode <> nil then
Add(subNode.Text);
end;
end;
break;
end;
Tabelle.Items.EndUpdate;
end;
Frag mich nicht wie, aber es geht soweit. Das Problem ist nun folgendes, es wird immer höchstens nur ein Datensatz angezeigt, also muss irgendwas an der Schleife falsch sein.