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='Knoten' then
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='TLG' then
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]