Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#7

Re: XML "String Wurst" formatieren

  Alt 28. Jul 2009, 10:45
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.
  Mit Zitat antworten Zitat