使用Delphi7TClientDataSet:是否有可能保存它的XML内容在一个缩进的格式
-
27-09-2019 - |
题
我使用Delphi7ClientDataSet阅读和书写xml文件对于我的一些数据。
但是,当我想要浏览此外程序(双击xml在窗户浏览器)我的'无效的角色被发现在文本内容。错误的处理资源'-甚至虽然数据的读写的现从内Delphi。
有没有办法强迫TClientDataSet写的内容中的一个缩进的方式代替在一条线?
这种方式我可以很容易打开它变成一个文本编辑器和找到什么角色将触发器上述错误。
无论如何:我发现它更加清晰XML文件的编写与CR/LF和缩进。
谢谢。
解决方案
这是因为,正确的编码(喜欢 <?xml version="1.0" encoding="UTF-8"?>
)没有被指定在输出文件,但它包含一些人物与不相容的编码。
作为 RRUZ提到, 指定明确的 TDataPacketFormat
作为 dfXMLUTF8
当编写的文件肯定会解决的'无效性的错误,因为它将编写的编码标签的第一个:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <DATAPACKET Version="2.0">[...]
你还可以添加的编码手动开始时的文件已经存在的文件。
至于可读格式,一些读者可阅读的原个衬垫和做格式对于你(浏览器,如火狐或互联网Exporer和XML编辑喜欢 XMLNotePad)
其他提示
当您使用 TCustomClientDataSet.SaveToFile
过程,可以选择输出格式,该默认值设置为dfBinary
至极以二进制格式编码的数据。
procedure TCustomClientDataSet.SaveToFile(const FileName: string = '';
Format: TDataPacketFormat = dfBinary);
尝试改变 Format
的参数dfXML
或dfXMLUTF8
ClientDataSet1.SaveToFile('file.xml',dfXML);
如果你想格式化您可以使用 FormatXMLData
功能尝试XML输出此代码
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');
我修改您的代码,因为我有一些问题,UTF-8:
Procedure FormatXMLFile(XmlFile:string);
var
oXml : TXMLDocument;
s : utf8String;
begin
oXml := TXMLDocument.Create(nil);
try
oXml.LoadFromFile(XmlFile);
s := oxml.XML.Text;
s := StringReplace(s, '><', '>' + #13#10 + '<' , [rfReplaceAll]);
//oXml.XML.Text:=xmlDoc.FormatXMLData(oxml.XML.Text);
oxml.XML.Text := s;
oXml.Active := true;
oXml.SaveToFile(XmlFile);
finally
oXml := nil;
end;
end;