根据XML文件父节点的属性值取得所有子节点

 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

 

转载于:https://www.cnblogs.com/qingqinghebiancao/archive/2013/05/31/3109817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值