vesuch mal Dieses
Delphi-Quellcode:
function TXmlDocument.Content:
string;
var
SL: TStringList;
procedure Expand(
const Indent:
string; Elements: TXmlElements);
var
i: Integer;
S:
String;
begin
for i := 0
to Elements.Count - 1
do
if Elements[i].Elements.Count > 0
then begin
SL.Add(Indent + '
<' + Elements[i].
Name + '
>');
Expand(Indent + '
', Elements[i].Elements);
SL.Add(Indent + '
</' + Elements[i].
Name + '
>');
end else begin
S := Trim(Elements[i].Content);
if S <> '
'
then
SL.Add(Indent + '
<' + Elements[i].
Name + '
>' + S + '
</' + Elements[i].
Name + '
>')
else
SL.Add(Indent + '
<' + Elements[i].
Name + '
/>');
end
end;
begin
SL := TStringList.Create;
try
SL.Add('
<?xml version="1.0" encoding="utf-8" ?>');
Expand('
', Elements);
Result := SL.Text;
finally
SL.Free;
end;
end;
Beim Original war nicht nur die große Laufzeit das Schlimme.
Schlecht war auch die Art der Parameter/Speicherverwaltung.
So wurde bei mehrfach verschalteten Nodes ein Vielfaches des Speichers belegt, welches auch noch mit zunehmender Anzahl der ChildNodes anwuchs, da der String über Str mehrfach verwaltet wurde. (welches samso auch schon gut beseitigt hat)