Einzelnen Beitrag anzeigen

chris_82

Registriert seit: 26. Aug 2003
112 Beiträge
 
Delphi 6 Enterprise
 
#1

Warum funktioniert rekursiv aufgerufene Procedure nicht?

  Alt 3. Sep 2003, 14:19
Also ich hab mir folgende Procedure geschrieben:

Delphi-Quellcode:
procedure Tfrm_haupt.abschnitte_erstellen(var kno_a:ixmlnode; var xml_z:ixmlnode);
var
  i,anz_abschnitte:integer;
  const c_Abschnitt='Abschnitt';
  const c_TLG='TLG';
begin
 anz_abschnitte:=kno_a.ChildNodes[0].ChildNodes.Count;
 if anz_abschnitte > 1 then
 begin
  begin
   begin
    for i:=0 to anz_abschnitte-1 do
    begin
     if kno_a.ChildNodes[0].ChildNodes[i].AttributeNodes['Typ'].Text='Knotenthen
     begin
      xml_z.AddChild(c_Abschnitt);

      xml_z.Childnodes[i].Attributes['Bez']:=kno_a.AttributeNodes['Bez'].Text;
     end
     else if kno_a.ChildNodes[0].ChildNodes[i].AttributeNodes['Typ'].Text='TLGthen
     begin
      xml_z.AddChild(c_TLG);
      xml_z.Childnodes[i].Attributes['I']:=kno_a.ChildNodes[0].Childnodes[i].AttributeNodes['IR'].Text;
      xml_z.ChildNodes[i].Attributes['Bez']:=kno_a.ChildNodes[0].Childnodes[i].AttributeNodes['Bez'].Text;
     end;
     kno_a:=kno_a.ChildNodes[0].ChildNodes[i];
     xml_z:=xml_z.Childnodes[i];
     abschnitte_erstellen(pkno_abschnitt,abschnitt_knoten);
    end;
   end;
  end;
 end;
end;
diese rufe ich so auf:

Delphi-Quellcode:
 pkno_abschnitt:=pkno_nodes[Lb_Leistungsbereich.ItemIndex];
 abschnitt_knoten:=xml_ziel.ChildNodes['Stlbzlb'];

 abschnitte_erstellen(pkno_abschnitt,abschnitt_knoten);
es geht darum ein XML Dokument solange nach einem Knoten zu durchsuchen und entsprechen einen Knoten in ein neues Dokument zu schreiben, bis es diesen Knoten nicht mehr gibt. Der Knoten nach dem ich suche kann immer und immmer wieder in sich selbst vorkommen, siehe folgendes Schema (1.)

Code:

Die Schemata als grafische Darstellung:

1.
           /-lkno-----kno(0-unendlich)  
kno-------/
          \
           \-zus

2.
                            (Abschnittstyp]
                         **********************************************
                         *  /-hinw                                   *
                         * /                                          *
stl--------abschnitt------/                                           *
          (0-unendlich) * \                       *****************  *
                         *  \     /-Abschnitt-------Abschnittstyp *  *
                         *   \   /                 *****************  *
                         *    \-/                                     *
                         *      \                                     *
                         *       \                                    *
                         *        \tl (0-unendl.                      
                         **********************************************

und ich schreibe dann eben in ein anderes Dokument, da kann ein Knoten ebenfalls wieder unendliche male in sich vorkommmen.

Nun habe ich das Problem, den ersten Durchlauf macht die Procedure Problemlos, aber beim nächsten ist der listindex überschritten.

Aber ich kann keinen Fehler finden.....

[edit=Daniel B]Titel korrigiert. Mfg, Daniel B[/edit]
....oop und nun...??
http://www.sengewald.info
  Mit Zitat antworten Zitat