• TClientDataSet[28]: 读写其他格式的 XML 文件



    TClientDataSet 可以直接存取的 XML 有自己的格式规范, 存取其他格式 XML 需要相应的映射文件(*.xtr).

    这种 *.xtr 文件是用 XML Mapper(Delphi 自带, 可从开始菜单或 IDE -> Tools 启动)制作的.

    一般会需要两个 *.xtr 文件, 一个用于读取(例子中是: ToDp.xtr), 一个用于写入(例子中是: ToXml.xtr).

    可以通过 *.xtr 文件只读写源 XML 中的部分数据, 如果读取过于复杂的 XML 会生成嵌套的 DataSet 字段.

    下面演示 ToXml.xtr、ToDp.xtr 的制作过程, 假如源文件(Test.xml)如下:





    然后通过 TXMLTransformProvider 或 TXMLTransform 都可以让 TClientDataSet 读写此 XML 了.

    先用 TXMLTransformProvider:

    //先添加控件: ClientDataSet1、DataSource1、DBGrid1、XMLTransformProvider1、Button1, 然后:
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ChDir('C:\Temp\DelphiTest\'); { 三个相关文件都放这了 }
    
      { 数据控件挂接 }
      DBGrid1.DataSource := DataSource1;
      DataSource1.DataSet := ClientDataSet1;
      ClientDataSet1.ProviderName := 'XMLTransformProvider1'; { 数据提供者 }
    
      { 读取转换; 包括下面的属性都可在设计时设置 }
      XMLTransformProvider1.TransformRead.TransformationFile := 'ToDp.xtr';
      { 写入转换 }
      XMLTransformProvider1.TransformWrite.TransformationFile := 'ToXML.xtr';
      { 源文件 }
      XMLTransformProvider1.XMLDataFile := 'Test.xml';
    
      { 打开 }
      ClientDataSet1.Open;
    end;
    
    { 数据编辑后, 保存到源文件 }
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ClientDataSet1.ApplyUpdates(0);
    end;
    

    特别是在只读或只写的情况下用 TXMLTransform 更好, 下面是用 TXMLTransform 读取的例子:

    //先添加控件: ClientDataSet1、DataSource1、DBGrid1、XMLTransform1, 然后:
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ChDir('C:\Temp\DelphiTest\');
    
      DBGrid1.DataSource := DataSource1;
      DataSource1.DataSet := ClientDataSet1;
    
      XMLTransform1.SourceXmlFile := 'Test.xml';
      XMLTransform1.TransformationFile := 'ToDp.xtr';
    
      ClientDataSet1.XMLData := XMLTransform1.Data;
    end;
    
  • 相关阅读:
    [BZOJ1565][NOI2009]植物大战僵尸
    [BZOJ1566][NOI2009]管道取珠
    [BZOJ4104][Thu Summer Camp 2015]解密运算
    [BZOJ1003][ZJOI2006]物流运输
    [BZOJ3790]神奇项链
    指纹模块原理_光学指纹模块原理
    Ubuntu 16.04无损分区大小调整工具Gparted
    16进制转换10进制
    Memory Ordering in Modern Microprocessors
    python 多态
  • 原文地址:https://www.cnblogs.com/del/p/1667051.html
Copyright © 2020-2023  润新知