各位在线的高手来看看我这个读取xml的程序怎么总是不能成功运行
unit Unit1;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
XMLDocument1: TXMLDocument;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TEQ=class {设备}
private
Name : string; //设备名称
ZLM : string; //支路名
TXXY: string;//通信协议
ZX: integer; //所在总线
CKH: integer; //串口号
Addr:integer;// 支路地址
CT:integer;//CT变比
PT:integer;//PT变比
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Root : IXMLNode; //指向XML根结点
Parent_Node: IXMLNode; //指向学生结点
Child_node : IXMLNode; //指向学生的子结点
EQ : TEQ; //存单个设备信息
List : TList; //存设备列表
i : integer; //循环变量
begin
List := TList.Create; //初始化列表
XMLDocument1.LoadFromFile('d:\changlian.xml'); //调入changlian.xml文件
Root := XMLDocment1.DocumentElement; //取XML文件的根结点,即“<CHANGLIAN>”
Parent_Node := Root.ChildNodes.First; //使Parent_Node指向EQ结点
while (Parent_Node <> nil) do //循环取多个EQ,可再多加几个EQ信息测试
begin
if (Parent_Node.NodeName = 'EQ') then //判断是否为EQ结点
begin
EQ := TEQ.Create; //新建一个学生的结构信息
EQ.Name := Parent_Node.Attributes['设备名称']; //取设备名称的属性
Child_Node := Parent_Node.ChildNodes.First;//使Child_Node指向该学生的第一个子结点信息
while (Child_Node <> nil) do //循环取学生的各个子各点
begin
if (Child_Node.NodeName = '设备名称') then //判断是否为姓名结点
EQ.Name := Child_Node.Text //取姓名结点的值,取于name字段中
else if (Child_Node.NodeName = '支路名') then //此行起后四行与前两行类似
EQ.ZLM := Child_Node.Text
else if (Child_Node.NodeName = '通信协议') then
EQ.TXXY := Child_Node.Text
else if (Child_Node.NodeName = '所在总线') then
EQ.ZX := strtoint(Child_Node.Text)
else if (Child_Node.NodeName = '串口号') then
EQ.CKH := strtoint(Child_Node.Text)
else if (Child_Node.NodeName = '地址') then
EQ.Addr := strtoint(Child_Node.Text)
else if (Child_Node.NodeName = 'CT') then
EQ.CT := strtoint(Child_Node.Text)
else if (Child_Node.NodeName = 'PT') then
EQ.PT := strtoint(Child_Node.Text);
Child_Node := Child_Node.NextSibling; //顺序取下一个设备的子结点信息
end;
List.Add(EQ); //把一个设备信息加入列表
end;
Parent_Node := Parent_Node.NextSibling; //顺序取下一个设备信息
end;
end;
end.