Einzelnen Beitrag anzeigen

Tillmet

Registriert seit: 3. Mär 2004
Ort: Sarstedt
23 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Von MSXML zu OmniXML kleines Problem aufgetreten

  Alt 21. Mai 2004, 11:45
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.
  Mit Zitat antworten Zitat