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

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 窗体设计器生成的代码

        
/// <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文档的流
);    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值