| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 656 人关注过本帖
标题:各位在线的高手来看看我这个读取xml的程序怎么总是不能成功运行
取消只看楼主 加入收藏
hougb
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-10-14
结帖率:100%
收藏
 问题点数:0 回复次数:3 
各位在线的高手来看看我这个读取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.
搜索更多相关主题的帖子: xml 运行 在线 
2010-11-17 20:26
hougb
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-10-14
收藏
得分:0 
<?xml version="1.0" encoding="gb2312" ?>
<CHANGLIAN>
 <EQ  id="1">
  <设备名称>电度表</设备名称>
  <支路名>幸福村1#</支路名>
  <所在总线>1</所在总线>
  <串口号>1</串口号>
  <支路地址>1</支路地址>
  <CT>20</CT>
  <PT>50</PT>
  <波特率>9600</波特率>
  <通信协议>645</通信协议>
 </EQ>
 <EQ id="2">
  <设备名称>电度表</设备名称>
  <支路名>幸福村2#</支路名>
  <所在总线>1</所在总线>
  <串口号>1</串口号>
  <支路地址>2</支路地址>
  <CT>20</CT>
  <PT>50</PT>
  <波特率>9600</波特率>
  <通信协议>645</通信协议>
 </EQ>
 <EQ  id="3">
  <设备名称>电度表</设备名称>
  <支路名>王龙坡2#</支路名>
  <所在总线>1</所在总线>
  <串口号>1</串口号>
  <支路地址>3</支路地址>
  <CT>40</CT>
  <PT>50</PT>
  <波特率>9600</波特率>
  <通信协议>645</通信协议>
 </EQ>
 <EQ  id="4">
  <设备名称>电度表</设备名称>
  <支路名>王龙坡1#</支路名>
  <所在总线>01</所在总线>
  <串口号>1</串口号>
  <支路地址>4</支路地址>
  <CT>30</CT>
  <PT>50</PT>
  <波特率>9600</波特率>
  <通信协议>645</通信协议>
 </EQ>
</CHANGLIAN>
这是xml源文件
2010-11-17 20:27
hougb
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-10-14
收藏
得分:0 
怎么没有人看啊
2010-11-18 09:13
hougb
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-10-14
收藏
得分:0 
呵呵,解决了!!
2010-11-18 09:34
快速回复:各位在线的高手来看看我这个读取xml的程序怎么总是不能成功运行
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040995 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved