| 
				   
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下编译通过。 
  			
				 |