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)如下:
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]
查看原圖(大圖)
然後通過 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;