您的位置:首页 > 其它

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

2013-05-31 09:57 204 查看
<?xml version="1.0"?>
<root>
<Nodes name="操作类型">
<node value="1">增加</node>
<node value="2">删除</node>
<node value="3">修改</node>
<node value="4">启用</node>
<node value="5">停用</node>
</Nodes>

<Nodes name="代码分类类型">
<node value="1">系统类</node>
<node value="2">表计类</node>
</Nodes>
</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

文件的相关知识。

public static List<object[]> GetListData(string nodename)
{
string filePath = System.Web.HttpContext.Current.Server.MapPath("~/xml/ListData.config");
List<object[]> results= new List<object[]>(0x20);

XElement xdoc = XElement.Load(filePath);
var fatherQuery = from fatherNode in xdoc.Descendants("Nodes")
where fatherNode.Attribute("name").Value.Equals(nodename)
select fatherNode;

var sonQuery = from childNode in fatherQuery.Descendants("node")
select new
{
key = childNode.Attribute("value").Value,
value = childNode.Value
};

/*上面的查询分成了两段,实际可用下面一句话代替
var sonQuery = from childNode in xdoc.Descendants("Nodes").Where(r => r.Attribute("name").Value.Equals(nodename)).Descendants("node")
select new
{
key = childNode.Attribute("value").Value,
value = childNode.Value
};*/

foreach (var s in sonQuery)
{
results.Add(new object[] { s.key, s.value });
}

return results;
}


LINQ To XML学习地址:http://msdn.microsoft.com/zh-cn/library/bb387012(v=vs.90).aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: