根据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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//XmlNode.h //版本:V1.01测试版 //为帮助作者完善XmlNode,希望大家讲错误发送给作者,以完善其功能 #ifndef XML_NODE_H #define XML_NODE_H #define XML_OBJECT_TYPE_ERROR 0x00 //节点类型错误 #define XML_OBJECT_TYPE_DOCUMENT 0x01 //节点类型为文档,即为xml根节点,用于记录文件路径 #define XML_OBJECT_TYPE_DECLARATION 0x02 //节点类型为描述 #define XML_OBJECT_TYPE_ATTRIBUTE 0x03 //节点类型为属性 #define XML_OBJECT_TYPE_COMMENT 0x04 //节点类型为注释 #define XML_OBJECT_TYPE_CHAR_DATA 0x05 //节点类型为不被解析的字符数据 #define XML_OBJECT_TYPE_ELEMENT 0x06 //节点类型为子节点 #define XML_OBJECT_TYPE_VALUE 0x07 //节点类型为节点 #define XML_OBJECT_TYPE_MAX 0x07 //节点类型的最大 #include #include using namespace std; class __declspec(dllexport)CXmlNode { protected: CXmlNode(); public: ~CXmlNode(); public: /*************************************************** Type: static public Explain: 获取作者信息 Return: 作者信息 ***************************************************/ static string GetAuthorInfo(); /*************************************************** Type: static public Explain: 获取版本信息 Return: 版本信息 ***************************************************/ static string GetVersionInfo(); /*************************************************** Type: static public Explain: 读取xml文件 Para: [in] sPath xml文件路径 Return: 根节点指针。 Mark: 当读取xml文件失败时,返回0 ***************************************************/ static CXmlNode * LoadFile(string sPath); /*************************************************** Type: public Explain: 保存Xml文件 Para: [in] sPath xml文件路径,当sPath为空时,将默认保存在上次读取时的路径中 Return: 保存文件是否成功。 Mark: 如果当前节点为根节点,则记录的xml文件路径将被替换 如果当前节点不是跟节点,只保存当前节点和其所有子节点。为保证xml文件格式正确,将自动在Xml中添加声明 ***************************************************/ bool SaveFile(string sPath); /*************************************************** Type: public Explain: 保存Xml文件 Return: 保存文件是否成功。 Mark: xml文件保存路径为已经设置的路径,默认为打开文件时的路径,也可以通过SetValue函数修改路径,详见SetValue函数说明 如果当前节点为根节点,则记录的xml文件路径将被替换 如果当前节点不是跟节点,只保存当前节点和其所有子节点。为保证xml文件格式正确,将自动在Xml中添加声明 **********************

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值