使用Delphi7 TClientDataSet:是否可以以缩进格式保存XML内容

Ede*_*com 4 xml delphi encoding tclientdataset delphi-7

我正在使用Delphi7 ClientDataSet来读取和写入我的一些数据的xml文件.

Howerver,当我想在程序外浏览它时(在Windows资源管理器中双击xml)我得到'在文本内容中找到了无效字符.处理资源时出错 - 即使数据在Delphi中读写也很好.

有没有办法强制TClientDataSet以缩进的方式将其内容写入一行?

这样我就可以轻松地将其打开到文本编辑器中,找到哪个字符会触发上述错误.

无论如何:我发现使用CR/LF和压缩来编写XML文件要清楚得多.

Thx提前.

RRU*_*RUZ 7

使用该TCustomClientDataSet.SaveToFile过程时,可以选择输出格式,默认情况下,此值设置为dfBinary以二进制格式对数据进行编码.

 procedure TCustomClientDataSet.SaveToFile(const FileName: string = '';
  Format: TDataPacketFormat = dfBinary);
Run Code Online (Sandbox Code Playgroud)

尝试将Format参数更改为dfXMLdfXMLUTF8

ClientDataSet1.SaveToFile('file.xml',dfXML);
Run Code Online (Sandbox Code Playgroud)

如果你想格式化XML输出你可以使用该FormatXMLData函数试试这个代码

uses
 XMLDoc;

Procedure FormatXMLFile(XmlFile:string);
var
   oXml : TXMLDocument;
 begin
   oXml := TXMLDocument.Create(nil);
   try
     oXml.LoadFromFile(XmlFile);
     oXml.XML.Text:=xmlDoc.FormatXMLData(oXml.XML.Text);
     oXml.Active := true;
     oXml.SaveToFile(XmlFile);
   finally
     oXml := nil;
   end;
 end;
Run Code Online (Sandbox Code Playgroud)

最后你的代码看起来像这样

 ClientDataSet1.SaveToFile('test.xml',dfXML);
 FormatXMLFile('test.xml');
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果数据包含'François`中的字符'çé...',则保存为'dfXML`是不够的,需要`dfXMLUTF8`. (2认同)