现在软件项目的趋势逐渐变成基于配置的开发,这给项目带来了很大的灵活性,特别是xml产生后,基于配置的开发变得十分重要。在项目中为了让页面的菜单能够动态的配置,我没有把数据保存在数据库中去,而是写在一个xml文件中,那么程序的工作就是根据xml文件的内容动态读取并生成导航菜单。(实际上是解析xml文件),先分享出来供朋友们参考,多多提出意见。
Xml文件格式如下:
 <?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?> <root>
<root> <node name="项目清单录入" url="ProjectListTest.aspx" />
  <node name="项目清单录入" url="ProjectListTest.aspx" /> <node name="项目经理指派" url="PMProjectListTest.aspx" />
  <node name="项目经理指派" url="PMProjectListTest.aspx" /> <node name="项目信息维护" url="ProjectInfoMaintainTest.aspx" />
  <node name="项目信息维护" url="ProjectInfoMaintainTest.aspx" /> <node name="项目信息确认" url="ProjectConfirmTest.aspx" />
  <node name="项目信息确认" url="ProjectConfirmTest.aspx" /> <node name="退出" url="LoginTest.aspx"></node>
  <node name="退出" url="LoginTest.aspx"></node> </root>
</root>
下面要做的工作就是根据配置动态的生成菜单。
由于实现起来很简单,我就不用多描述了。下面直接展现代码实现:
 public void Render()
public void Render() {
        { StringBuilder sb = new StringBuilder();
            StringBuilder sb = new StringBuilder(); List<Navigator> list = new List<Navigator>();
            List<Navigator> list = new List<Navigator>(); LoadFromXML(list);
            LoadFromXML(list); foreach (Navigator navigator in list)
            foreach (Navigator navigator in list) {
            { sb.AppendFormat(@"<a href='{0}'>{1}</a> | ", navigator.Url, navigator.Name);
                sb.AppendFormat(@"<a href='{0}'>{1}</a> | ", navigator.Url, navigator.Name); }
            } this.ltlNavigator.Text = sb.ToString().Remove(sb.Length-1);
            this.ltlNavigator.Text = sb.ToString().Remove(sb.Length-1); }
        }
 private void LoadFromXML(List<Navigator> list)
        private void LoadFromXML(List<Navigator> list) {
        { string path =
            string path = HttpContext.Current.Server.MapPath(
                HttpContext.Current.Server.MapPath( UrlHelper.GetClientUrl(ConfigurationManager.AppSettings["HeadNavigatorFilePath"]));
                    UrlHelper.GetClientUrl(ConfigurationManager.AppSettings["HeadNavigatorFilePath"])); XmlDocument doc = new XmlDocument();
            XmlDocument doc = new XmlDocument(); doc.Load(path);
            doc.Load(path);
 XmlNodeList nodes = doc.SelectNodes("/root/*");
            XmlNodeList nodes = doc.SelectNodes("/root/*"); foreach (XmlNode node in nodes)
            foreach (XmlNode node in nodes) {
            { Navigator navigator = new Navigator();
                Navigator navigator = new Navigator(); navigator.Name = node.Attributes["name"].InnerText;
                navigator.Name = node.Attributes["name"].InnerText; navigator.Url = node.Attributes["url"].InnerText;
                navigator.Url = node.Attributes["url"].InnerText; list.Add(navigator);
                list.Add(navigator); }
            } }
        }
其中Navigator类如下:
 protected class Navigator
protected class Navigator {
        { Private Field
            Private Field
 Pubilc Property
            Pubilc Property }
        } }
}
生成的效果图:

 
                    
                 
 基于xml文件动态生成导航菜单简单实现:
基于xml文件动态生成导航菜单简单实现:
     
        
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号