1 <?xml version="1.0"?> 2 <root> 3 <Nodes name="操作类型"> 4 <node value="1">增加</node> 5 <node value="2">删除</node> 6 <node value="3">修改</node> 7 <node value="4">启用</node> 8 <node value="5">停用</node> 9 </Nodes> 10 11 <Nodes name="代码分类类型"> 12 <node value="1">系统类</node> 13 <node value="2">表计类</node> 14 </Nodes> 15 </root>
项目中现在要写一个方法,给定一个参数nodeName,即Nodes节点的name属性,将Nodes节点的所有
node节点获取,并将每一个node的value属性和值保存在一个object[]中,然后将每一个object数组添加到
List中,所以最终方法的返回值是List<object[]>。
object[0] object[1]
1 增加
2 删除
3 修改
4 启用
5 停用
方法中最关键的是如何根据父节点的Nodes的name属性值来获取所有子节点,涉及到用LINQ来操作XML
文件的相关知识。
1 public static List<object[]> GetListData(string nodename) 2{ 3 string filePath = System.Web.HttpContext.Current.Server.MapPath("~/xml/ListData.config"); 4 List<object[]> results= new List<object[]>(0x20); 5 6 XElement xdoc = XElement.Load(filePath); 7 var fatherQuery = from fatherNode in xdoc.Descendants("Nodes") 8 where fatherNode.Attribute("name").Value.Equals(nodename) 9 select fatherNode; 10 11 var sonQuery = from childNode in fatherQuery.Descendants("node") 12 select new 13 { 14 key = childNode.Attribute("value").Value, 15 value = childNode.Value 16 }; 17 18 /*上面的查询分成了两段,实际可用下面一句话代替 19 var sonQuery = from childNode in xdoc.Descendants("Nodes").Where(r => r.Attribute("name").Value.Equals(nodename)).Descendants("node") 20 select new 21 { 22 key = childNode.Attribute("value").Value, 23 value = childNode.Value 24 };*/ 25 26 foreach (var s in sonQuery) 27 { 28 results.Add(new object[] { s.key, s.value }); 29 } 30 31 return results; 32}
LINQ To XML学习地址:http://msdn.microsoft.com/zh-cn/library/bb387012(v=vs.90).aspx