TClientDataset-XML映射

TClientDataset-XML映射,xml,delphi,delphi-2009,tclientdataset,Xml,Delphi,Delphi 2009,Tclientdataset,我试图将TClientDataSet中的数据保存到XML文件中,但它不喜欢我的一些字段。帮助文件要求以两种方式之一创建定义:使用my\bin文件夹中的xmlmapper.exe文件或IDOMDocument接口 问题是,xmlmapper.exe不存在,IDOMDocument是Delphi 2009发布时没有编写文档的恼人结构之一。因此,我必须在一个不存在的EXE或一个没有文档的接口之间进行选择,并且没有指示哪些对象实现了它或如何创建它们 有人知道我在这种情况下应该做什么吗?XMLMapper

我试图将TClientDataSet中的数据保存到XML文件中,但它不喜欢我的一些字段。帮助文件要求以两种方式之一创建定义:使用my\bin文件夹中的xmlmapper.exe文件或IDOMDocument接口

问题是,xmlmapper.exe不存在,IDOMDocument是Delphi 2009发布时没有编写文档的恼人结构之一。因此,我必须在一个不存在的EXE或一个没有文档的接口之间进行选择,并且没有指示哪些对象实现了它或如何创建它们


有人知道我在这种情况下应该做什么吗?

XMLMapper.exe在我的\bin目录中,它也在我的工具菜单下(尽管我可能已经在那里添加了它…)您有什么版本的Delphi?我看了这本书,没有看到任何看起来像它的东西,这三本书都没有。您可以再次运行安装,看看是否跳过了安装。

您可以查看一些第三方Delphi书籍(Marco Cantu有一些),看看它们是否记录了IDOMDocument。您也可以。

如果您使用的字段在delphi的XML序列化中不受支持,则需要创建自己的XML加载/保存函数


这并不难,如果您这样做了,代码可以扩展为其他序列化格式(JSON、CSV、XLSX等)。

第三种选择是使用OmniXML或NativeXml之类的XML库,简单地迭代所有记录并使用自编代码将字段写入XML

这样做的好处是可以完全控制所有字段类型和特定字段的转换。

声明:

void __fastcall SaveToFile(const System::UnicodeString FileName = System::UnicodeString(), TDataPacketFormat Format = (TDataPacketFormat)(0x0));
Mem1->SaveToFile("C:\wateverfile.xml",dfXMLUTF8);

  • dfBinary
    :信息以二进制格式编码
  • dfXML
    :信息以XML编码,扩展字符使用转义序列编码
  • dfXMLUTF8
    :信息用XML编码,扩展字符用UTF8表示

您有什么版本的Delphi?您不能访问ClientDataSet.XMLData属性并将其保存到文本文件中吗?刚刚选中。我唯一跳过的是功能区控件。它也在我的(Delphi 2009 Professional)bin目录中丢失。AFAIK是用于XML数据绑定的,它只包含在Enterprise/Architect版本中。我相信这并不难。我只是不知道去哪里创作它们。
Mem1->SaveToFile("C:\wateverfile.xml",dfXML); 
Mem1->SaveToFile("C:\wateverfile.cds",dfBinary); //for a binary save