delphi 格式化xml字符串的好代码

xghobddn  于 2023-08-04  发布在  其他
关注(0)|答案(5)|浏览(160)

有人有现成的函数,它接受一个XML字符串并返回一个正确缩进的字符串吗?
例如

<XML><TAG1>A</TAG1><TAG2><Tag3></Tag3></TAG2></XML>

字符串
并在插入换行符、制表符或空格后返回格式良好的String?

zd287kbt

zd287kbt1#

RTL在XMLDoc.pas中有FormatXMLData,它接受并返回字符串。

edqdpe6u

edqdpe6u2#

使用OmniXML

program TestIndentXML;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  OmniXML,
  OmniXMLUtils;

function IndentXML(const xml: string): string;
var
  xmlDoc: IXMLDocument;
begin
  Result := '';
  xmlDoc := CreateXMLDoc;
  if not XMLLoadFromAnsiString(xmlDoc, xml) then
    Exit;
  Result := XMLSaveToAnsiString(xmlDoc, ofIndent);
end;

begin
  Writeln(IndentXML('<XML><TAG1>A</TAG1><TAG2><Tag3></Tag3></TAG2></XML>'));
  Readln;
end.

字符串
上面的代码片段被发布到公共领域。

falq053o

falq053o3#

正在使用XSLT...

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="/">
        <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

字符串

xu3bshqb

xu3bshqb4#

我使用了Michael Elsdörfer的Tidylibtidy。它为您提供了大量的选项,您可以在应用程序外部配置它们。也适用于HTML。
这是我使用的一些非常粗糙的代码。随你便。

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;

字符串

ttp71kqs

ttp71kqs5#

Delphi 中构建的XMLDocumentDOM对象有一个漂亮的格式化选项。您只需将XML加载到其中并将其保存出来,如果您设置了该选项,那么它将使一切变得美好。
我会查一下并更新这个答案。

相关问题