CharlesChen's Technical Space

简单实用是我一直在软件开发追求的目标(I Focus on. Net technology, to make the greatest efforts to enjoy the best of life.)
Not the best, only better
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

移动项目开发笔记(动态生成xml文件生成导航菜单)

Posted on 2008-07-23 00:14  Charles Chen  阅读(944)  评论(1编辑  收藏  举报

     现在软件项目的趋势逐渐变成基于配置的开发,这给项目带来了很大的灵活性,特别是xml产生后,基于配置的开发变得十分重要。在项目中为了让页面的菜单能够动态的配置,我没有把数据保存在数据库中去,而是写在一个xml文件中,那么程序的工作就是根据xml文件的内容动态读取并生成导航菜单。(实际上是解析xml文件),先分享出来供朋友们参考,多多提出意见。

 

Xml文件格式如下:

<?xml version="1.0" encoding="utf-8" ?>
<root>
  
<node name="项目清单录入" url="ProjectListTest.aspx" />
  
<node name="项目经理指派" url="PMProjectListTest.aspx" />
  
<node name="项目信息维护" url="ProjectInfoMaintainTest.aspx" />
  
<node name="项目信息确认" url="ProjectConfirmTest.aspx" />
  
<node name="退出" url="LoginTest.aspx"></node>
</root>
 

下面要做的工作就是根据配置动态的生成菜单。

由于实现起来很简单,我就不用多描述了。下面直接展现代码实现:

public void Render()
        
{
            StringBuilder sb 
= new StringBuilder();
            List
<Navigator> list = new List<Navigator>();
            LoadFromXML(list);
            
foreach (Navigator navigator in list)
            
{
                sb.AppendFormat(
@"<a href='{0}'>{1}</a> | ", navigator.Url, navigator.Name);
            }

            
this.ltlNavigator.Text = sb.ToString().Remove(sb.Length-1);
        }


        
private void LoadFromXML(List<Navigator> list)
        
{
            
string path =
                HttpContext.Current.Server.MapPath(
                    UrlHelper.GetClientUrl(ConfigurationManager.AppSettings[
"HeadNavigatorFilePath"]));
            XmlDocument doc 
= new XmlDocument();
            doc.Load(path);

            XmlNodeList nodes 
= doc.SelectNodes("/root/*");
            
foreach (XmlNode node in nodes)
            
{
                Navigator navigator 
= new Navigator();
                navigator.Name 
= node.Attributes["name"].InnerText;
                navigator.Url 
= node.Attributes["url"].InnerText;
                list.Add(navigator);
            }

        }

 

 

其中Navigator类如下:

protected class Navigator
        
{
            
Private Field

            
Pubilc Property
        }

}

 

生成的效果图: