|   2)       采用LINQ to XML技术必须要引用的命名空间 using System.Xml.Linq 3)       根据权限“标签”文件各XML元素如表1所示,通过LINQ to XML中XDocument类创建一个权限校验的XML模板。     //采用LINQ to XML技术创建一个权限校验XML文件         XDocument doc = new XDocument(             new XDeclaration("1.0", "utf-8", "yes"),             new XElement("authconfig",                 new XElement ("create","ssl"),                 new XElement ("resoure","资源"),                 new XElement("public"),                 new XElement("protected"),                 new XElement("private"))); 4)       通过对LINQ to XML对指定的父XML元素进行查询并追加相应的权限记录信息         private void AppendNode(string ParentNodeName,XElement Node)          {             //查找相应父节点,以追加权限记录信息 var ParentNode = doc.Descendants(ParentNodeName).First(el=>el.Name.ToString()==ParentNodeName);             ParentNode.Add(Node);             ShowConfigInfo();         } (5)权限记录信息的组织及追加权限记录信息方法的调用 权限记录信息采用LINQ to XML中XElement类来进行组织。当用户对权限记录信息的需求发生变更后(例如:增加读写/只读、收费/免费等权限),只需要在此处进行相应的处理就可以了,除XML文件解析处需要稍做调整外,其它代码基本不需改动。 var Node = new XElement("group", new XAttribute("name", cmbGroupName.SelectedItem.ToString())); AppendNode("private", Node);  //追加权限记录信息的方法调用 (6)权限记录信息解析 在此处给人感觉只是用来显示相关信息意义不大,实际使用中我们可以根据相应的遍历对一组用户来进行权限的校验,大大提高了响应速度。 //这里不对public与protected节点下的信息显示,目的是显示LINQ TO XML的另一种查询方法  //我们也可以从根节点直接遍历显示所有信息    var gpinfo = from el in doc.Elements("authconfig").Elements("private").Elements("group")               select el;  foreach (var item in gpinfo) {    txtParse.Text = txtParse.Text + item.Attribute("name").Value + "\r\n"; } (7)权限记录信息校验主要工作是对单个用户、组、节点访问某一资源时所需要的判断处理。下面代码分两部分,第一部分是针对带XML属性的权限记录文件查询,第二部分是针对不带属性的记录信息查询,请注意两种查询语句的不同之处。 1)带属性的权限记录信息查询   var query = from el in doc.Elements("authconfig").Elements("private").Elements(                            cmbSearchType.SelectedItem.ToString())                              where el.Attribute("name").Value == txtSearch.Text                              select el;    if (query.Count() > 0)      txtParse.Text = "搜索成功";  else     txtParse.Text = "搜索失败" 2)不带属性的权限记录信息查询   var query= from el in doc.Elements("authconfig").Elements("private").Elements                                  (cmbSearchType.SelectedItem.ToString())                              where el.Value == txtSearch.Text                              select el;    if (query.Count() > 0)      txtParse.Text = "搜索成功";  else      txtParse.Text = "搜索失败"; 五、结语程序的可移植、可复用、可扩展一直以来都是程序员讨论的热门话题。微软推出系列新特性之一的LINQ to XML,使我们在资源权限灵活控制上实现了部分这样的想法。希望通过这个讨论能够起到抛砖引玉的作用。本文的例子在Windows XP SP3、Visual Studio 2008 SP1下编译通过。
   |