Nice bit of code to format an xml string

前端 未结 5 1045
轮回少年
轮回少年 2021-02-05 12:55

Anyone got a ready made function that will take an XML string and return a correctly indented string?

eg

A

        
5条回答
  •  说谎
    说谎 (楼主)
    2021-02-05 13:36

    I have used Tidy with libtidy from Michael Elsdörfer. It give you heaps of options and you can configure them externally to the application. Also applicable to HTML.

    This is some very rough code that I used. Do with it as you please.

    function TForm1.DoTidy(const Source: string): string;
    var
      Tidy              : TLibTidy;
    begin
      if not TidyGlobal.LoadTidyLibrary('libtidy.dll') then
      begin
        //    Application.MessageBox('TidyLib is not available.', 'Error', 16);
        //    exit;
        raise Exception.Create('Cannot load TidyLib.dll');
      end;
      Tidy := TLibTidy.Create(Self);
      try
        Tidy.LoadConfigFile(ExtractFilePath(Application.ExeName) +
          'tidyconfig.txt');
        //    Tidy.Configuration.IndentContent := tsYes;
        //    Tidy.Configuration.IndentSpaces := 5;
        //    Tidy.Configuration.UpperCaseTags := False;
        //    Tidy.Configuration.NumEntities := True;
        //    Tidy.Configuration.AccessibilityCheckLevel := 2;
        //    Tidy.Configuration.InlineTags := 'foo,bar';
        //    Tidy.Configuration.XmlDecl := True;
        //    Tidy.Configuration.XmlTags := True;
        //    Tidy.Configuration.CharEncoding := TidyUTF8;
        //    Tidy.Configuration.WrapLen := 0;
        //    Tidy.SaveConfigFile('tidyconfig.txt');
        Tidy.ParseString(Source);
        Result := Tidy.RunDiagnosticsAndRepair;
      finally
        Tidy.Free;
      end;
    end;
    

提交回复
热议问题