Delphi程序开发1

第一次写博客,记录一下自己的学习过程。

用Delphi读取XML文件,获取xml文件的节点值,并输出。

代码
unit Track;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,XMLDoc,XMLIntf,StdCtrls,msXML,XMLDom,
  Vcl.Grids, AdvObj, BaseGrid, AdvGrid, Vcl.ExtCtrls, Classes, Controls,
  ExtCtrls, Grids;

type
  sTrack =class(TObject)
    WaferId:string;
    Snum,Gnum:integer;
  end;
  TForm1 = class(TForm)
    panel: TPanel;
    procedure FormCreat(Sender:TObject);
  private
    { Private declarations }
    function RoundFloat(f: double; i: Integer): double;
  public
    { Public declarations }
    Tracklist: Tstringlist;
    procedure GetXmlData();
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function TForm1.RoundFloat(f: double; i: Integer): double;
var
    s: string;
    ef: Extended;
begin
     if f = 0 then
    begin
        Result := 0;
        Exit;
    end;
    s := '#.' + StringOfChar('0', i);
    if s = '#.' then
        s := '#';
    ef := StrToFloat(FloatToStr(f)); // 防止浮点运算的误差
    Result := StrToFloat(FormatFloat(s, ef));
end;


procedure TForm1.FormCreat(Sender: TObject);
begin
  screen.Cursor:=crHourGlass;
  GetXmlData;
  screen.Cursor:=crDefault;
end;


procedure TForm1.GetXmlData;              //从xml中查找数据
var
 XmlDoc:TXMLDocument;
 rootnode,snode,t1node,t2node,wnode,s,t: IXMLnode;
 nodelist,slist:IXMLNodelist;
 i,n:integer;
 count,icount:integer;
 cTrack:sTrack;

 begin
  Tracklist:=TStringList.Create;
  XmlDoc:=TXMLDocument.Create(nil);
 XmlDoc.FileName:='C:\Users\Administrator\Desktop\Inspection_JOB_CJ2_PJ2_20171207_034414.xml';//访问的xml文件的路径
    XmlDoc.Active:=true;
    rootnode:=XmlDoc.DocumentElement;  //表示xmlDoc的根节点
    nodelist:=rootnode.ChildNodes;  //根节点下的子节点
    count:=nodelist.Count;          //根节点下的子节点个数
    if rootnode <>nil then    //遍历需要的子节点
    begin
    t:=nodelist[11].ChildNodes[1].ChildNodes[1].ChildNodes[1]; //LotIdHash/Values/I/Values
    slist:=t.ChildNodes;
    icount:=slist.Count;    //LotIdHash/Values/I/Values下的子节点个数,子节点(T,I)
    for i := 1 to icount-1 do
       begin
       cTrack:=sTrack.Create;
       s:=t.ChildNodes[i];   //I节点
       t1node:=s.ChildNodes[0].ChildNodes[0].ChildNodes[1];   //I/Trackers/I/NumInspectedDie节点
       t2node:=s.ChildNodes[0].ChildNodes[0].ChildNodes[11];  //I/Trackers/I/NumGoodDie节点
       wnode:=s.ChildNodes[1].childNodes[1];                  //I/SubstrateDetails/WaferId
       cTrack.WaferId:=wnode.NodeValue;
       cTrack.Snum:=t1node.NodeValue;
       cTrack.Gnum:=t2node.NodeValue;
       TrackList.AddObject(cTrack.WaferId,cTrack);
       end;//存放到Tstringlist中

    with Grid1 do//输出到grid1
       begin
        RowCount:=TrackList.Count+1;
        for n := 0 to TrackList.Count-1 do
          begin
           cTrack:=sTrack(TrackList.Objects[n]);
           Delete(cTrack.WaferId,7,3);
           Cells[0,n+1]:=cTrack.WaferId;
           Objects[0,n+1]:=cTrack;
           Cells[1,n+1]:= FloatToStr(RoundFloat(cTrack.Gnum/cTrack.Snum,4)*100);
          end;
       end;
    end;
 end;

end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值