现在软件项目的趋势逐渐变成基于配置的开发,这给项目带来了很大的灵活性,特别是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>
<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);
}
}
{
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
}
}
{
Private Field
Pubilc Property
}
}
生成的效果图: