15

XML文字列を受け取り、正しくインデントされた文字列を返す既製の関数を入手した人はいますか?

例えば

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

改行とタブまたはスペースを挿入した後、適切にフォーマットされた文字列を返しますか?

4

5 に答える 5

16

RTL には、文字列を受け取って返すXMLDoc.pas内の FormatXMLData があります。

于 2008-10-25T04:24:04.263 に答える
10

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.

上記のコード フラグメントは、パブリック ドメインにリリースされています。

于 2008-10-24T15:50:59.027 に答える
4

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>
于 2008-10-24T15:51:29.510 に答える
4

Michael Elsdörfer のlibtidyでTidyを使用しました。オプションのヒープが提供され、アプリケーションの外部でそれらを構成できます。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;
于 2008-10-30T04:40:04.157 に答える
1

Delphi に組み込まれている XML ドキュメント DOM オブジェクトには、かなりの書式設定オプションがあります。XML をロードして保存するだけで、そのオプションが設定されていれば、すべてがきれいになります。

調べて、この回答を更新します。

于 2008-10-24T16:22:08.060 に答える