<AA>
<record1>
<MZ_DM>02</MZ_DM>
<HYZK_DM>5</HYZK_DM>
<WHCD_DM>16</WHCD_DM>
</record1>
<record2>
<MZ_DM>01</MZ_DM>
<HYZK_DM>1</HYZK_DM>
<WHCD_DM>6</WHCD_DM>
</record2>
<AA>
上面这个文件XML文件有如<record1>,<record2>,<record3>,<record3>....这样的节点,可以顺序增加,应该怎样生成和读取这个XML.

解决方案 »

  1.   

    首先用用xml mapping tool 工具把xml转换成xtr文件
    操作方法
    打开delphi->menu->tool->xml mapper
    在xml mapper->file->open打开你的xml文件,左边document里双击你所要转化的字段到
    中间transformation里,然后先点菜单create->datapacket from xml,然后就再点菜单create->transformation就把datapacket加到中间的selected Fields里了,最后在菜单
    save->transformation保存为xtr文件就完成了delphi里调用
    新建一个工程,需要的控件ClientDataSet1,XMLTransformProvider1,DataSource1,dbgrid1ClientDataSet1的providename指向XMLTransformProvider1;
    DataSource1的dataset指向ClientDataSet1;
    dbgrid1的datasource指向DataSource1;XMLTransformProvider1的transformRead.transformactionFile填入你刚才转换的xtr文件包含路径;
    XMLTransformProvider1的transformWrite.transformactionFile填入你刚才转换的xtr文件包含路径;XMLTransformProvider1的XMLDataFile填入你的xml文件包含路径;
    最后把ClientDataSet1的active=true就可以在dbgrid1里看到你的xml数据了
      

  2.   

    如要保存可用adotable控件的savetofile方法
    例:adotable1.savetofile('xx.xml',pfxml);//xml格式
        adotable1.savetofile('xx.adtg',pfadtg);//adtg格式
    加入可用
        adotable1.loadfromfile('xx.xml');
    当然还可用
     Txmldocument创建一个xml文档
      

  3.   

    procedure DataSetToDOM(RootName, RecordName: string;
      XMLDoc: TXMLDocument; DataSet: TDataSet);
    var
      iNode ,iChild: iXMLNode;
      i : integer;
    begin
      DataSet.Open;
      DataSet.First;
      {root}
      XMLDoc.DocumentElement := XMLDoc.CreateNode(RootName);
      {add table data}
      while not DataSet.Eof  do
      begin
        {add a node for each record}
        iNode := XMLDoc.DocumentElement.AddChild(RecordName);
        for I := 0 to DataSet.FieldCount  - 1 do    // Iterate
        begin
          {add an element for each field}
          iChild := iNode.AddChild(DataSet.Fields[i].FieldName);
          if DataSet.Fields[i].IsNull then
            iChild.Text := ''
          else
            iChild.Text := DataSet.Fields[i].AsString;
        end;    // for
        DataSet.Next;
      end;    // while
    end;