用XML配置菜单的一种思路,附一些不太准确的测试代码
2013-01-10 11:56
330 查看
///<summary>
///Configs
///addedbyzbw911
///</summary>
[XmlRoot("menulist")]
publicclassMenuList
{
[XmlElement(ElementName="group",Type=typeof(Group))]
publicGroup[]groups;
}
///<summary>
///每个菜单的单元组
///</summary>
publicclassGroup
{
[XmlAttribute(AttributeName="title")]
publicstringtitle;
[XmlArray(ElementName="node")]
[XmlArrayItem(ElementName="node")]
publicNode[]Nodes;
}
///<summary>
///每个菜单的结点,每个结点下面还有可能会有菜单
///</summary>
publicclassNode
{
[XmlElement(ElementName="node")]
publicNode[]Nodes;
[XmlAttribute("href")]
publicstringhref{get;set;}
[XmlAttribute("target")]
publicstringtarget{get;set;}
[XmlAttribute("rel")]
publicstringrel{get;set;}
[XmlAttribute("name")]
publicstringname{get;set;}
[XmlAttribute(AttributeName="title")]
publicstringtitle{get;set;}
[XmlAttribute(AttributeName="url")]
publicstringurl{get;set;}
}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
上面定义的菜单的个结构,菜单由多个group组成,每个group包含多个node,node是自包含,这样实现了无限级联菜单,
其实group也是可以用node来代替的,
但是,之所谓增加一个group无非也是为了使层次稍微清晰一点点。
下面是与之相关的一些测试代码,
publicclasstest
{
publicMenuListt(outstringall)
{
stringapplicationBaseDirectory=null;
//try
//{
applicationBaseDirectory=AppDomain.CurrentDomain.BaseDirectory;
//}
//catch(Exceptionex)
//{
////LogLog.Warn(declaringType,"ExceptiongettingApplicationBaseDirectory.ConfigFilepropertypath["+m_configFile+"]willbetreatedasanabsolutepath.",ex);
//}
//if(applicationBaseDirectory!=null)
//{
//Justthebasedir+theconfigfile
stringfullPath2ConfigFile=HttpContext.Current.Server.MapPath("~/App_Data/Memu.xml");//Path.Combine(applicationBaseDirectory,"");
//}
//else
//{
//fullPath2ConfigFile=m_configFile;
//}
varmySerializer=newXmlSerializer(typeof(MenuList));
//Toreadthefile,createaFileStream.
varmyFileStream=File.ReadAllBytes(fullPath2ConfigFile);
//CalltheDeserializemethodandcasttotheobjecttype.
var_Configuration=(MenuList)mySerializer.Deserialize(newMemoryStream(myFileStream));
varxxx=newMenuList
{
groups=new[]
{
newGroup
{
Nodes=new[]{newNode
{
title="tit",
url="u",
Nodes=new[]
{
newNode
{
href="href",
name="name"
},
newNode
{
href="href",
name="name"
}
}
}
,newNode
{
href="href",
name="name"
},
newNode
{
href="href",
name="name"
}
},
title="groptitle",
},
newGroup
{
Nodes=new[]{newNode
{
title="tit",
url="u"
,Nodes=new[]{
newNode
{
href="",
name="name",
rel="aaa"
,Nodes=new[]
{
newNode
{
href="href",
Nodes=newNode[]
{
newNode
{
href="aaaaa"
}
}
}
}
}
}
}
},
title="groptitle"
},
}
};
varstream=newMemoryStream();
//stream.Seek(0,SeekOrigin.Begin);
mySerializer.Serialize(stream,xxx);
//StreamReadersr=newStreamReader(stream);
//stringall=sr.ReadToEnd();
//stream.ToArray();
all=System.Text.Encoding.Default.GetString(stream.ToArray());
return_Configuration;
}
}
这样就可以从一个xml文件将之序列化一个对象,然后再通过这个对象进行菜单的生成操作,
下面是大致的XML文件格式,
<?xmlversion="1.0"?>
-<menulistxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-<grouptitle="groptitle">
-<node>
-<Nodetitle="tit"url="u">
<nodehref="href"name="name"/>
<nodehref="href"name="name"/>
</Node>
<Nodehref="href"name="name"/>
<Nodehref="href"name="name"/>
</node>
</group>
-<grouptitle="groptitle">
-<node>
-<Nodetitle="tit"url="u">
-<nodehref=""rel="aaa"name="name">
-<nodehref="href">
<nodehref="aaaaa"/>
</node>
</node>
</Node>
</node>
</group>
</menulist>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
最后说一句,实际上,菜单的生成不必要如此复杂,实际上我为的是将权限与菜单的对应放在一起,不去程序中写
if(有什么权限)
{显示某个菜单}
这样的形式,才使用这样的方案。
实际上,生成菜单与权限对应还有其它方案,如在数据库中,但这个实际上与这个方案类似。
不选择数据库,是因为,菜单的变化真不会有想像中如此那样多的变化,何改再去做一些CURD的方法呢,用最简单的方法来解决这个问题吧。
相关文章推荐
- 快速构建基于代码级性能测试方法的一种思路和简单实现
- 实现二级菜单的一种方式--没有js 运行不了,主要看代码红色部分,只提供思路
- Spring Mvc的xml配置和测试
- Mybatis---代码自动生成(generatorConfig.xml配置)
- web.xml中的一些配置
- android 横屏竖屏设置的详解(最好不要用Java代码实现,用xml配置文件吧)
- js编程思路--把相同功能的代码,配置放到一个对象里
- 控制菜单的比较麻烦的一种思路(不推荐使用),后面还有较为好点的
- spring mvc +hibernate注解版测试增,删,改,查 简单xml配置应用
- 解决app在没有上传app store前大规模安装测试问题的一些办法与思路
- XFire中Services.xml 配置的一些细节
- 一段XSLT转换XML节点名的测试代码
- Struts2配置文件复用代码【web.xml、struts.xml、常量配置】
- Ajax 1.服务器端代码配置测试
- TabActivity可以显示实现多页显示效果,在xml布局文件中需要有一些特殊的配置属性
- Tomcat项目发布的三种方式;一种:直接将项目(文件)直接复制到tomcat/webapps下二种:在tomcat/conf/server.xml配置tomcat的虚拟路径;
- 由String得到XML中Document对象的一种方法代码
- 为代码上色,测试配置CSS的功能
- Windows2003服务器安全配置的一些思路
- 简单的web.xml和build.xml配置代码