Hallo,
wie sehen denn Deine
XML-Dateien inhaltlich aus?
Nur in der Form Öffnen- und Schließentag mit Einträgen dazwischen oder auch mit CDATA?
Wenn kein CDATA in der
XML-Datei vorkommt, kannst Du meiner Meinung nach zuerst jedes
< durch einen Zeilenumbruch ersetzen und anschließend aus jedem
Zeilenumbruch + </ ein
</ machen.
Nun musst Du "nurnoch" aus jedem
></ ein
> + Zeilenumbruch + </ machen.
Danach stehen linksbündig alle Öffnentags untereinander.
Anschließend wird ab dem zweiten
< ein zusätzliches Leerzeichen eingefügt und bei jedem
</ ein Leerzeichen weniger.
Im Quelltext könnte das (ungetestet) etwa so aussehen:
Delphi-Quellcode:
var
xml : TStringList;
leer :
String;
i : Integer;
begin
leer := '
';
xml := TStringList.Create;
xml.LoadFromFile('
XML-Datei.xml');
xml.Text := AnsiReplaceText(
xml.Text,'
<',#13#10 + '
<');
xml.Text := AnsiReplaceText(
xml.Text,#13#10 + '
</','
</');
xml.Text := AnsiReplaceText(
xml.Text,'
></','
>' + #13#10 + '
</');
for i := 1
to xml.Count - 1
do begin
if Copy(
xml[i],1,2) = '
</'
then begin
leer := copy(leer,1,Length(leer) - 1);
end
if Copy(
xml[i],1,1) = '
<'
then begin
leer := leer + '
';
end;
xml[i] := leer +
xml[i];
end;
while Trim(
xml[0]) = '
'
do xml.Delete(0);
xml.SaveToFile('
XML-Datei.neu.xml');
xml.Free;
end;
Nur mal eben so hingedattelt, über Eleganz und Performanz wollen wir hier mal lieber nicht reden.