AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Von MSXML zu OmniXML kleines Problem aufgetreten
Thema durchsuchen
Ansicht
Themen-Optionen

Von MSXML zu OmniXML kleines Problem aufgetreten

Ein Thema von Tillmet · begonnen am 18. Mai 2004 · letzter Beitrag vom 18. Jul 2004
 
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, 10: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz