Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   XML rekursiv durchsuchen (https://www.delphipraxis.net/163130-xml-rekursiv-durchsuchen.html)

mcbain 16. Sep 2011 12:13

XML rekursiv durchsuchen
 
Hallo Leute, ich stehe greade wieder mal auf dem Schlauch, könnte mir jemand bitte auf die Sprünge helfen?
Ich will eine XML rekursiv durchlaufen um einen bestimmten Knoten darin zu finden. Hänge aber gerade irgendwie...
Irgendwie durchläuft Delphi den Baum nicht ganz...

Folgendes habe ich propiert:

Code:
 procedure RekursiveSuche(aStartNode: IXMLNode; aString: string);
   var Node: IxmlNode;
       i: integer;
   begin
     Node := aStartNode;
     for i := 0 to Node.ChildNodes.Count - 1 do
     begin
       if Node.IsTextElement then
          if Node.NodeName = aString then
             ShowMessage('gefunden');

       if not Node.IsTextElement then
          RekursiveSuche(Node.ChildNodes.First,aString);
     end;

   end;
Ich weiß, es ist ein triviales Problem, aber komm gerdade nicht auf meinen Fehler...
Wäre nett, wenn jemand kurz drüber sehen könnte.
vielen Dank.
mc

Alaitoc 16. Sep 2011 12:31

AW: XML rekursiv durchsuchen
 
Könnte es sein, das du immer nur die RekursiveSuche auf den ersten Knoten der Unterknoten anwendest?

Siehe:
Zitat:

Node.ChildNodes.First
Nebenbei, Mahlzeit!

Edit: Abgesehen davon führst du die Schleife X mal der Unterknotenanzahl durch, überprüfst jedoch nicht den aktuellen Unterknoten sondern den Hauptknoten.

Du musst mit Node.Childnodes[i] arbeiten (hoffe die Syntax war so)

MfG Alaitoc

mcbain 16. Sep 2011 12:36

AW: XML rekursiv durchsuchen
 
Habs nun hinbekommen.
Danke für den Hinweis Alaitoc.


Code:
 procedure RekursiveSuche(aStartNode: IXMLNode; aString: string);
   var Node: IxmlNode;
       i: integer;
   begin
     Node := aStartNode;
     for i := 0 to Node.ChildNodes.Count - 1 do
     begin
        ShowMessage(Node.ChildNodes.Nodes[i].NodeName);

       if Node.ChildNodes.Nodes[i].IsTextElement then
          if Node.ChildNodes.Nodes[i].NodeName = aString then
             ShowMessage('gefunden');

       if not Node.ChildNodes.Nodes[i].IsTextElement then
          RekursiveSuche(Node.ChildNodes.Nodes[i],aString);
     end;

   end;

Iwo Asnet 17. Sep 2011 01:58

AW: XML rekursiv durchsuchen
 
Gepimpt...
Delphi-Quellcode:
procedure RekursiveSuche(aStartNode: IXMLNode; aString: string);
var
  i: integer;

begin
  for i := 0 to aStartNode.ChildNodes.Count - 1 do
  begin
    ShowMessage(aStartNode.ChildNodes.Nodes[i].NodeName);
    if aStartNode.ChildNodes.Nodes[i].IsTextElement then
      if aStartNode.ChildNodes.Nodes[i].NodeName = aString then
        ShowMessage('gefunden')
      else
    else
      RekursiveSuche(aStartNode.ChildNodes.Nodes[i],aString);
  end;
end;

himitsu 17. Sep 2011 10:05

AW: XML rekursiv durchsuchen
 
Bei Google suchenXPath?


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf