xml - 使用 Delphi7 TClientDataSet : is it possible to have it save its XML contents in an indented format?

标签 xml delphi encoding delphi-7 tclientdataset

我正在使用 Delphi7 TClientDataSet 为我的一些数据读取和写入 XML 文件。

但是,当我想在程序外浏览它时(在 Windows 资源管理器中双击 XML),我得到“在文本内容中发现无效字符。错误处理资源' - 即使数据在 Delphi 中读写正常。

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

这样我就可以很容易地在文本编辑器中打开它并找出哪个字符会触发上述错误。

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

最佳答案

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

 procedure TCustomClientDataSet.SaveToFile(const FileName: string = '';
  Format: TDataPacketFormat = dfBinary);

尝试更改 Format dfXMLdfXMLUTF8

的参数
ClientDataSet1.SaveToFile('file.xml',dfXML);

如果你想格式化 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;

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

 ClientDataSet1.SaveToFile('test.xml',dfXML);
 FormatXMLFile('test.xml');

关于xml - 使用 Delphi7 TClientDataSet : is it possible to have it save its XML contents in an indented format?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3848853/

相关文章:

Android设置内容类型HttpPost

java - 让用户点击的地方出现一个按钮

xml - *.xml 文件的 Subversion 属性应该是什么?

delphi - ITaskService接口(interface)访问冲突

date - 如何比较 dd/mm/yyyy 格式的两个日期?

python - Lambda 函数 - TypeError : unhashable type: 'numpy.ndarray'

c++ - Qt 5.5 setDevice() 定义

xml - 使用 AngularJS 返回 xml 的跨域 ajax 请求

delphi - 为什么当 TIdHTTPProxyServer 尝试将请求转发到大多数代理服务器时返回 403?

c# - 在 C# 中序列化对象时如何指定 XML 编码