So nun funzt es, hatte erstens etwas vergessen, einmal auf den entsprechenden Knoten zu springen und zum zweiten hab ich mit dem bisherigen rekursiven Aufruf der Procedure den Boden weggerissen, so das er nie mehr an den entsprechenden Knoten gekommen ist.
Aber mit der Einführung der temp Variablen läuft es so wie ich es mir gedacht hab.
Delphi-Quellcode:
procedure Tfrm_haupt.abschnitte_erstellen(var kno_a:ixmlnode; var xml_z:ixmlnode);
var i,anz_abschnitte:integer;
temp_kno_a, temp_xml_z : ixmlnode
const c_Abschnitt='Abschnitt';
c_TLG='TLG';
begin
anz_abschnitte:=kno_a.ChildNodes[0].ChildNodes.Count;
if anz_abschnitte >= 1 then
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.ChildNodes[0].ChildNodes[i].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;
temp_kno_a:=kno_a.ChildNodes[0].ChildNodes[i];
temp_xml_z:=xml_z.Childnodes[i];
abschnitte_erstellen(temp_kno_a,temp_xml_z);
end;
end;
end;
@Chakotay1308:
bin Neuling in Delphi und ebenfalls in
XML, was genau ist nun XSL, meinst du das ich damit einfacher zu dem Ziel komme?
Der rekursive Aufruf findet eben daher statt, da es in einem Dokument z.B. einen Knoten vom Typ=Knoten geben kann und dieser enthält wiederum einen Knoten vom Typ=Knoten und dieser wieder... und ich muss in dem Zweig eben jeden dieser Knoten als Knoten vom Typ=Abschnitt in ein neues Dokument schreiben, eben wieder Knoten enthält Knoten vom Typ=Abschnitt..., ich hoff das ist jetzt etwas klarer geworden. Aber nun funzt der Code ja *ganzdollfreu*