【问题标题】:TClientDataset - XML mappingTClientDataset - XML 映射
【发布时间】:2009-01-10 05:16:59
【问题描述】:

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

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

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

【问题讨论】:

  • 你有什么版本的Delphi?
  • 您不能只访问 ClientDataSet.XMLData 属性并将其保存到文本文件中吗?

标签: xml delphi delphi-2009 tclientdataset


【解决方案1】:

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

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

【讨论】:

  • 我相信这并不难。我只是不知道去哪里创建它们。
【解决方案2】:

XMLMapper.exe 在我的\bin 目录中,它也在我的工具菜单下(虽然我可能已经将它添加到那里......)你有什么版本的Delphi?我查看了feature matrix,我没有看到任何看起来不在所有三个版本中的东西。您可以再次运行安装,看看是否跳过了安装。

【讨论】:

  • 刚刚检查过。我唯一跳过的是功能区控件。
  • 我的 (Delphi 2009 Professional) bin 目录中也缺少它。 AFAIK 适用于 XML 数据绑定,仅包含在 Enterprise/Architect 版本中。
【解决方案3】:

您可能会查看一些第 3 方 Delphi 书籍(Marco Cantu 有一些),看看它们是否记录了 IDOMDocument。你也可以look around for some examples

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      声明:

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

      Mem1->SaveToFile("C:\wateverfile.xml",dfXML); 
      

      Mem1->SaveToFile("C:\wateverfile.cds",dfBinary); //for a binary save
      
      • dfBinary:信息以二进制格式编码。
      • dfXML:信息以 XML 编码,扩展字符使用转义序列编码。
      • dfXMLUTF8:信息以 XML 编码,扩展字符使用 UTF8 表示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-13
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        相关资源
        最近更新 更多