(原创) 简单的用反射机制读取XML并以树状显示

原创 2007年09月13日 06:59:00
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Xml;

namespace XMLTest
...{
    
/**//// <summary>
    
/// Form1 的摘要说明。
    
/// </summary>

    public class Form1 : System.Windows.Forms.Form
    
...{
        XmlDocument xmldoc;     
//文档对象
        XmlElement element;        //元素
        System.Xml.XmlNodeList list;  //节点列表.   
//        System.Xml.XmlNode TEMP;

        
private System.Windows.Forms.Button button1;
        
private System.Windows.Forms.RichTextBox info;
        
private System.Windows.Forms.TreeView treeView1;
        
private System.Windows.Forms.TextBox tb_name;
        
private System.Windows.Forms.TextBox tb_age;
        
private System.Windows.Forms.Label label1;
        
private System.Windows.Forms.Label label2;
        
private System.Windows.Forms.Label label3;
        
private System.Windows.Forms.Button button2;
        
/**//// <summary>
        
/// 必需的设计器变量。
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public Form1()
        
...{
            
//
            
// Windows 窗体设计器支持所必需的
            
//
            InitializeComponent();
            
//
            
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            
//
        }


        
/**//// <summary>
        
/// 清理所有正在使用的资源。
        
/// </summary>

        protected override void Dispose( bool disposing )
        
...{
            
if( disposing )
            
...{
                
if (components != null
                
...{
                    components.Dispose();
                }

            }

            
base.Dispose( disposing );
        }


        
Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
        
/**//// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>

        private void InitializeComponent()
        
...{
            
this.button1 = new System.Windows.Forms.Button();
            
this.info = new System.Windows.Forms.RichTextBox();
            
this.treeView1 = new System.Windows.Forms.TreeView();
            
this.tb_name = new System.Windows.Forms.TextBox();
            
this.tb_age = new System.Windows.Forms.TextBox();
            
this.label1 = new System.Windows.Forms.Label();
            
this.label2 = new System.Windows.Forms.Label();
            
this.label3 = new System.Windows.Forms.Label();
            
this.button2 = new System.Windows.Forms.Button();
            
this.SuspendLayout();
            
// 
            
// button1
            
// 
            this.button1.Location = new System.Drawing.Point(184256);
            
this.button1.Name = "button1";
            
this.button1.Size = new System.Drawing.Size(10432);
            
this.button1.TabIndex = 0;
            
this.button1.Text = "读取XML(&R)";
            
this.button1.Click += new System.EventHandler(this.button1_Click);
            
this.button1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.button2_KeyUp);
            
// 
            
// info
            
// 
            this.info.Location = new System.Drawing.Point(216152);
            
this.info.Name = "info";
            
this.info.ReadOnly = true;
            
this.info.Size = new System.Drawing.Size(20056);
            
this.info.TabIndex = 1;
            
this.info.Text = "";
            
this.info.KeyUp += new System.Windows.Forms.KeyEventHandler(this.button2_KeyUp);
            
// 
            
// treeView1
            
// 
            this.treeView1.ImageIndex = -1;
            
this.treeView1.Location = new System.Drawing.Point(816);
            
this.treeView1.Name = "treeView1";
            
this.treeView1.SelectedImageIndex = -1;
            
this.treeView1.Size = new System.Drawing.Size(136296);
            
this.treeView1.TabIndex = 2;
            
this.treeView1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.button2_KeyUp);
            
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
            
// 
            
// tb_name
            
// 
            this.tb_name.Location = new System.Drawing.Point(21648);
            
this.tb_name.Name = "tb_name";
            
this.tb_name.ReadOnly = true;
            
this.tb_name.Size = new System.Drawing.Size(16021);
            
this.tb_name.TabIndex = 3;
            
this.tb_name.Text = "";
            
this.tb_name.KeyUp += new System.Windows.Forms.KeyEventHandler(this.button2_KeyUp);
            
// 
            
// tb_age
            
// 
            this.tb_age.Location = new System.Drawing.Point(216104);
            
this.tb_age.Name = "tb_age";
            
this.tb_age.ReadOnly = true;
            
this.tb_age.Size = new System.Drawing.Size(16021);
            
this.tb_age.TabIndex = 4;
            
this.tb_age.Text = "";
            
this.tb_age.KeyUp += new System.Windows.Forms.KeyEventHandler(this.button2_KeyUp);
            
// 
            
// label1
            
// 
            this.label1.Location = new System.Drawing.Point(18424);
            
this.label1.Name = "label1";
            
this.label1.Size = new System.Drawing.Size(3216);
            
this.label1.TabIndex = 5;
            
this.label1.Text = "姓名";
            
// 
            
// label2
            
// 
            this.label2.Location = new System.Drawing.Point(18480);
            
this.label2.Name = "label2";
            
this.label2.Size = new System.Drawing.Size(3216);
            
this.label2.TabIndex = 6;
            
this.label2.Text = "年龄";
            
// 
            
// label3
            
// 
            this.label3.Location = new System.Drawing.Point(184128);
            
this.label3.Name = "label3";
            
this.label3.Size = new System.Drawing.Size(3216);
            
this.label3.TabIndex = 7;
            
this.label3.Text = "信息";
            
// 
            
// button2
            
// 
            this.button2.Location = new System.Drawing.Point(312256);
            
this.button2.Name = "button2";
            
this.button2.Size = new System.Drawing.Size(10432);
            
this.button2.TabIndex = 8;
            
this.button2.Text = "退出(&C)";
            
this.button2.Click += new System.EventHandler(this.button2_Click);
            
this.button2.KeyUp += new System.Windows.Forms.KeyEventHandler(this.button2_KeyUp);
            
// 
            
// Form1
            
// 
            this.AutoScaleBaseSize = new System.Drawing.Size(614);
            
this.ClientSize = new System.Drawing.Size(456336);
            
this.Controls.Add(this.button2);
            
this.Controls.Add(this.label3);
            
this.Controls.Add(this.label2);
            
this.Controls.Add(this.label1);
            
this.Controls.Add(this.tb_age);
            
this.Controls.Add(this.tb_name);
            
this.Controls.Add(this.treeView1);
            
this.Controls.Add(this.info);
            
this.Controls.Add(this.button1);
            
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
            
this.KeyPreview = true;
            
this.MaximizeBox = false;
            
this.MinimizeBox = false;
            
this.Name = "Form1";
            
this.Text = "XML测试 2007-09-13 01:09";
            
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
            
this.Load += new System.EventHandler(this.Form1_Load);
            
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.button2_KeyUp);
            
this.ResumeLayout(false);

        }

        
#endregion


        
/**//// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main()
        
...{
            Application.Run(
new Form1());
        }


        
private void button1_Click(object sender, System.EventArgs e)
        
...{
            System.Reflection.Assembly assemly
=typeof(Form1).Assembly;        //使用反射机制获取一个流,这个流当中包含了要读取的XML文档
            xmldoc=new XmlDocument();
           xmldoc.Load(assemly.GetManifestResourceStream(
"XMLTest.XmlTest.Xml"));                                                                            //用流读取XML文档(路径: XMLTest[工程名].XmlTest.Xml[文件名]).其实该XML文件                                                            //在编译时候就被集成进EXE文件中,读取的时候就要利用反射以流的方式读取出该文件
            element=xmldoc.DocumentElement;        //得到文档的根节点.
            list=element.ChildNodes;                             //然后得到根节点下所有子节点,作为一数组.
            TreeNode n=new TreeNode(xmldoc.DocumentElement.Name);
                          //TreeNode (treeView的节点),内添加一XML根节点的名称作为TreeNode的根节点
            foreach(System.Xml.XmlNode TEMP in list)...{      
                XmlElement element1
=(XmlElement)TEMP;
                                                                     // 得到节点数组中的所有节点,并依次另存为XML元素
                TreeNode nn=new TreeNode(element1.GetAttribute("id")); 
                                                                  
//得到XML元素属性值,作为标志放进TreeNode里作为子节点
              n.Nodes.Add(nn);              
            }

            treeView1.Nodes.Add(n);                                                   
//然后最终添加到treeView控件中.
        }


        
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
        
...{
            
try
            
...{
                
if(treeView1.SelectedNode.Parent!=null)        //(以下动作在鼠标选中的节点不是根节点的前提下有效)
                ...{
                    TreeNode node
=treeView1.SelectedNode;  //得到鼠标当前选中的节点
                    string nodetxt=node.Text; //节点名
                    foreach(System.Xml.XmlNode TEMP in list)  
                    
...{                                                                      //逐个比较该节点名与XmlNodeList中各元素名
                        XmlElement element1=(XmlElement)TEMP;       
                        
if(nodetxt.Equals(element1.GetAttribute("id"))) 
                        
...{
                            XmlNodeList nl
=element1.ChildNodes;    
                                                 //若匹配,则取出当前节点下面的所有子项,分别显示出来
                            XmlNode selectednode=nl.Item(0);
                            tb_name.Text
=selectednode.InnerXml;
                            selectednode
=nl.Item(1);
                            tb_age.Text
=selectednode.InnerXml;
                            selectednode
=nl.Item(2);
                            info.Text
=selectednode.InnerXml;
                        }

                    }

                }

            }

            
catch(Exception eeeeee)...{
                MessageBox.Show(
this,"所读取的XML文件有错误. 请检查错误信息: "+eeeeee.Message,"错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
              }

            }


        
private void Form1_Load(object sender, System.EventArgs e)
        
...{
        
        }


        
private void button2_Click(object sender, System.EventArgs e)
        
...{
            Application.Exit();
        }



        
private void Keydown(object sender, System.Windows.Forms.KeyPressEventArgs e)
        
...{
            
            
        }


        
private void button2_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
        
...{
        }


        
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        
...{
        }

    }

}

 

 

*********************以下是原XML文件的内容********************

<?xml version="1.0" encoding="UTF-8"?>
<!-- -->

<UsersList>
    
<User id="A393">
        
<name>Tom</name>
        
<Age>18</Age>
        
<info>T28BG19672HU1ILP328913B281</info>
    
</User>
    
<User id="R194">
        
<name>Jerry</name>
        
<Age>19</Age>
        
<info>T28BG196R28391F2F2944V1892</info>
    
</User>
    
<User id="S102">
        
<name>Linda</name>
        
<Age>17</Age>
        
<info>T28BVG27K10383H2SW19L32193</info>
    
</User>
    
<User id="A411">
        
<name>David</name>
        
<Age>20</Age>
        
<info>T28BHJ400JB4967110CVR08L99</info>
    
</User>
    
<User id="A996">
        
<name>Lucy</name>
        
<Age>18</Age>
        
<info>T28BG30185015224MYO10GL9P2</info>
    
</User>
    
<User id="M183">
        
<name>June</name>
        
<Age>18</Age>
        
<info>T28F92118TTG62114F5X211033</info>
    
</User>
</UsersList>

 

时间仓促, 我就不太按规范写了.

不过请大家注意!  反射机制可是需要牺牲一定的性能的!...

 

 xmldoc=new XmlDocument();
           xmldoc.Load(可以是文件名或包含XML文档的流
);    

JSP简单练习-用JDOM读取xml文件

用JDOM解析并输出user.xml 用户ID 用户名 密码 真实姓名 年龄 性别 ...
  • u012804490
  • u012804490
  • 2014年07月30日 12:29
  • 666

c#读取xml文件到datagridview中

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...
  • a771948524
  • a771948524
  • 2013年03月24日 09:20
  • 2780

jquery 读取 xml 并显示

XML页面 廉租房增加“取消委托”的功能。 廉租房取消“信息校验功能”,调整“委托确认”功能使之能修改申报信息。 共产房中止通知书右侧数字档...
  • u010728236
  • u010728236
  • 2013年05月23日 22:48
  • 365

xml文件解析成树状结构

package com.fcar.frameworks.utils; import com.fcar.frameworks.core.GlobalVar; import com.fcar.frame...
  • qq_17769347
  • qq_17769347
  • 2016年06月22日 14:47
  • 1762

j2ee中打开首页同时查询数据库,并在首页动态显示数据

一般我们在项目中都是通过点击来访问某一个action来实现数据的查询,并跳转到某视图来显示,但是在网站开发中,往往需要我们在默认的index.jsp中显示一些从数据库查询出来的数据。实现的方式有一些,...
  • tfy1332
  • tfy1332
  • 2014年04月03日 10:37
  • 2165

c#如何实现从xml中加载树目录,并且显示完整的Text

谈到xml,相信有一定编程基础的童鞋们都比较清楚了。xml文件格式类似于嵌套的样式,这种独特的层次结构很容易使我们联想到目录树,因此这不禁让我们对两者之间产生一种牵线的想法。这不禁,使我们有这么一个问...
  • ztzi321
  • ztzi321
  • 2015年03月05日 08:35
  • 2410

Asp 解析 XML并分页显示

Asp 解析 XML并分页显示
  • yimiyuangguang
  • yimiyuangguang
  • 2014年05月14日 01:10
  • 1495

读取XML文件动态绑定TreeView控件练习题

题目三:读取XML文件动态绑定TreeView控件 一、语言和环境 A、实现语言  C# B、环境要求  Visual Studio 2012 二、功能要求 现使用....
  • baidu_36074048
  • baidu_36074048
  • 2017年03月12日 16:18
  • 885

JAVA以及JSP中读取XML文件(解析及路径问题)

在系统开发过程中,从配置文件中读取配置信息是每一个系统必须具备的功能,例如,我们要配置读取数据库配置信息,包括驱动程序名、连接字符串,用户名,口令等信息,由于这些信息会随着用户的不同而发生改变,所以不...
  • Zhiyuan_Ma
  • Zhiyuan_Ma
  • 2016年12月24日 17:44
  • 1052

利用 Qt 读取 XML 文件的方法

XML 是可扩展标记语言(Extensible Markup Language)的缩写。XML 文件由内容和标记组成,通过以标记包围内容的方式将大部分内容包含在元素中。 Qt 中提供了多种读取XML文...
  • liyuanbhu
  • liyuanbhu
  • 2015年03月04日 17:01
  • 20505
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(原创) 简单的用反射机制读取XML并以树状显示
举报原因:
原因补充:

(最多只允许输入30个字)