C#,读取Xml生成菜单

最近因为写一个小工具,需要从Xml格式配置中读出数据,并动态生成菜单...因为是菜鸟,所以很费了点心思..本来着开放的精神,虽然只是一点小东西,但相信对新手还是有一点点帮助的.现拿出来和大家共享..

1、要求:从Xml文件中读出数据,并生成菜单,并在点击菜单时根据相关数据进行处理;
2、例子Xml和图片见后。
3、程序代码,及注释:
a)首先,从MenuItem派生一个DataMenuItem(即包含数据的菜单之意),因为Xml源文件里可能有很多数据需要保存,而MenuItem没有保存数据的地方
public class DataMenuItem:MenuItem
{
public string[] AttributeNames,AttributeValues;//保存该菜单的源Xml节点中的所有属性名称和值
public string Value;//该节点的值(值这种说法可能不太准确,应该是InnerText)
public string GetAttributeValueByName(string AttributeName)//为以后的程序取得属性值留的一个方法
{
if(AttributeNames==null||AttributeValues==null)return "";
if(AttributeNames.Length!=AttributeValues.Length)return "";
int i;
for(i=0;i

 1<attributenames.length;i++) "";="" attributevalues[i];="" b)然后是一个把xml数据添加到菜单的方法,详细说明见注释="" datamenuitem="" datamenuitem();="" i;="" if(attributenames[i]="AttributeName)return" if(node.attributes.count="" int="" menu)="" node,menuitem="" private="" return="" tempmenuitem="new" tempmenuitem.index="Menu.MenuItems.Count;//应该可以省略的." tempmenuitem.text="Node.Name;" tempmenuitem.value="Node.InnerText;" void="" xmltomenu(xmlnode="" {="" }="">0)//如果有属性,就保存了.没有属性就跳过   
 2{   
 3TempMenuItem.AttributeNames=new string[Node.Attributes.Count];   
 4TempMenuItem.AttributeValues=new string[Node.Attributes.Count];   
 5for(i=0;i<node.attributes.count;i++) if(node.childnodes.count="" menu.menuitems.add(tempmenuitem);="" system.eventhandler(this.datamenu_click);="" tempmenuitem.attributenames[i]="Node.Attributes[i].Name;" tempmenuitem.attributevalues[i]="Node.Attributes[i].Value;" tempmenuitem.click+="new" {="" }="" 添加处理click事件的方法,由于datamenuitem是带有数据的,所以这个处理方法可以根据数据的不同来做不同的处理.="">1)//因为即使没有子节点,Node.ChildNodes.Count也会是1   
 6{   
 7foreach(XmlNode Nodes in Node.ChildNodes)   
 8{   
 9XmlToMenu(Nodes,Menu.MenuItems[Menu.MenuItems.Count-1]);//递归调用自身   
10}   
11}   
12}   
13c)处理Click事件的方法:   
14private void DataMenu_Click(object sender, System.EventArgs e)   
15{   
16DataMenuItem Clicked=(DataMenuItem)sender;   
17MessageBox.Show(Clicked.Value);//这个只是测试一下,实际中可以根据情况的不同随意取用DataMenuItem里的数据;   
18} 
19
20  
21d)最后,只需要调用上面的方法就可以了。提供如下代码供参考,其中有些地方为了看起来更易懂,多花了一些步骤; 
22
23Menu_Xml.MenuItems.Clear();//Menu_Xml可自行修改;   
24int i;   
25XmlDocument xmldoc = new XmlDocument();   
26XmlTextReader reader=new XmlTextReader("Ini.xml");   
27xmldoc.Load(reader);   
28XmlNodeList NodeList=xmldoc.DocumentElement.ChildNodes;   
29for(i=0;i<nodelist.count;i++) <?xml="" ?="" encoding="GB2312" node="NodeList[i];" reader.close();="" version="1.0" xmlnode="" xmltomenu(node,menu_xml);="" {="" }="" 例子xml:ini.xml="">
30<test>
31<test1>1</test1>
32<test2>2</test2>
33<test3>3</test3>
34<test4>4</test4>
35<list>
36<test1>1</test1>
37<test2>2</test2>
38<test3>3</test3>
39<list1>
40<test1>1</test1>
41<test2>2</test2>
42</list1>
43</list>
44</test>
45
46![](http://ssave.myrice.com/pic.net/xml.gif)</nodelist.count;i++)></node.attributes.count;i++)></attributenames.length;i++)>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus