我有一个很大的记录,包括许多不同类型的字段和动态数组.我想将它保存到文件然后再读回来.想象一下这个简单的记录:
TCustomRecord = Record
Field1 : array of integer;
Field2 : Integer;
Field3 : String;
end;
Run Code Online (Sandbox Code Playgroud)
通常我必须使用这样的东西将此记录保存到文件中:
var
f : File of TCustomRecord;
cr : TCustomeRecord;
begin
Write(f, cr);
end;
Run Code Online (Sandbox Code Playgroud)
但由于动态数组和字符串类型,它不起作用.
所以问题是:
有没有办法将它保存(导出)到一个TXMLDocument不经过所有字段?(我的意思是逐个字段添加addChild())
War*_* P 1
我会谨慎地说“不”,尽管我不知道你所说的“遍历所有领域”是什么意思。
另一个答案链接到使用 RTTI 迭代记录中的字段的可行方法。然后,您必须确保您的记录不会使用 RTTI 迭代器代码无法理解的任何类型,否则它将不会被保存。
至于“不必自己调用 AddChild”,您可以简单地将所有内容存储在 XML 属性中,而不需要任何子节点。我不知道您是否知道这一点,但将记录中的字段映射到可能产生的 XML 内容的方法不止一种。
这是一个示例记录:
TMyData = record
Name:String;
Age:Integer;
Money:Double;
end;
Run Code Online (Sandbox Code Playgroud)
如果您根本不想调用 AddChild,您可以只写入属性,生成一个如下所示的实体:
<MyData Name="Warren" Age="48" Money="100.00" />
Run Code Online (Sandbox Code Playgroud)
没有人说你必须使用子节点:
<MyData>
<Name>Warren</Name>
<Age>48</Age>
<Money>100.00<Money/>
</MyData>
Run Code Online (Sandbox Code Playgroud)
因此,在我看来,您似乎在回避这样一个事实:XML 为您提供了多种执行这些操作的方法,并且类似 API 的 MSXML DOM 为您提供了不止一种将任何记录映射到文件的方法。
| 归档时间: |
|
| 查看次数: |
1762 次 |
| 最近记录: |