记录下一些读取XML的方法,以免到用的时候忘记了,还得花时间去找。

一、传统写法读取XML

现在我有一个XML文件如下:

现在我要查找名字为"王五"的这个人的 Id 和sex(性别) 和age(年龄)

代码:

  1. static void Main(string[] args)
  2. {
  3. XDocument xdoc = XDocument.Load("4.xml"); //加载xml
  4. List<XElement> eles = new List<XElement>(); //用来获取符合条件的节点集合
  5. XElement ele = xdoc.Element("root"); //获取根节点
  6. string nameTxt = "王五"; //要查找的条件
  7. TraditionalReadXML(ele,eles,nameTxt); //找到符合条件的数据添加到eles的集合里
  8. foreach (XElement item in eles) //遍历查到的数据,输出
  9. {
  10. Console.WriteLine("Id:{0},name:{1},sex:{2},age:{3}",
  11. item.Attribute("id").Value,item.Element("name").Value,item.Element("sex").Value,item.Element("age").Value);
  12. }
  13. Console.ReadKey();
  14. }
  15. /// <summary>
  16. /// 传统读取XML
  17. /// </summary>
  18. /// <param name="ele">查到哪个节点下的数据</param>
  19. /// <param name="eles">集合存放符合的数据</param>
  20. /// <param name="nameTxt">要查找的姓名</param>
  21. private static void TraditionalReadXML(XElement ele,List<XElement> eles,string nameTxt)
  22. {
  23. //首先遍历ele下的所有子节点,注意是子节点,不能查到下下层的节点
  24. foreach (XElement item in ele.Elements())
  25. {
  26. //判断这个元素的名字是不是name,如果是name,看内容是不是nameTxt
  27. if (item.Name.LocalName == "name")
  28. {
  29. if (item.Value == nameTxt)
  30. {
  31. //符合条件的节点,取其父级
  32. eles.Add(item.Parent);
  33. }
  34. }
  35. //如果item里面还有子节点就递归
  36. TraditionalReadXML(item, eles, nameTxt);
  37. }
  38. }

执行代码得到的结果为:

二、Linq写法读取XML

把上面的代码改成:

  1. static void Main(string[] args)
  2. {
  3. XDocument xdoc = XDocument.Load("4.xml"); //加载xml
  4. List<XElement> eles = new List<XElement>(); //获取符合条件的节点集合
  5. string nameTxt = "王五"; //要查找的条件
  6. //获得符合条件的节点
  7. var query = from s in xdoc.Descendants()
  8. where s.Name.LocalName == "name" && s.Value ==nameTxt
  9. select s.Parent;
  10. foreach (XElement item in query) //把符合条件的节点添加到eles集合
  11. {
  12. eles.Add(item);
  13. }
  14. foreach (XElement item in eles) //遍历查到的数据,输出
  15. {
  16. Console.WriteLine("Id:{0},name:{1},sex:{2},age:{3}",
  17. item.Attribute("id").Value,item.Element("name").Value,item.Element("sex").Value,item.Element("age").Value);
  18. }
  19. Console.ReadKey();
    }

加粗的地方为linq写法,它们的实现是一样的,这样会比普通的写法简单许多。

三、Linq查询lambda写法

把代码改成:

  1. static void Main(string[] args)
  2. {
  3. XDocument xdoc = XDocument.Load("4.xml"); //加载xml
  4. List<XElement> eles = new List<XElement>(); //获取符合条件的节点集合
  5. string nameTxt = "王五"; //要查找的条件
  6. //遍历节点,把符合条件的添加到 eles集合
  7. foreach (XElement i in xdoc.Descendants().Where(e=>{
  8. if(e.Name.LocalName=="name")
  9. {
  10. if(e.Value==nameTxt)
  11. {
  12. return true ;
  13. }
  14. }
  15. return false;
  16. }))
  17. {
  18. eles.Add(i.Parent);
  19. }
  20. foreach (XElement item in eles) //遍历查到的数据,输出
  21. {
  22. Console.WriteLine("Id:{0},name:{1},sex:{2},age:{3}",
  23. item.Attribute("id").Value,item.Element("name").Value,item.Element("sex").Value,item.Element("age").Value);
  24. }
  25. Console.ReadKey();
  26. }

以上是三种读取XML的方法,可以根据自己喜欢的方法去用。

C#基础巩固(3)-Linq To XML 读取XML的更多相关文章

  1. Linq to XML 读取XML 备忘笔记

    本文转载:http://www.cnblogs.com/infozero/archive/2010/07/13/1776383.html Linq to XML 读取XML 备忘笔记 最近一个项目中有 ...

  2. C#使用Linq To XML读取XML,Linq生成XML,Linq创建带属性或带节点XML

    using System; using System.Linq; using System.Xml.Linq; namespace Sample2 { class Program { static v ...

  3. Unity3d 新建xml 读取xml

    在游戏开发中.Xml常常被用来作为技能配置.地图配置.人物动作配置等配置文件. Unity3d内置的Xml库让我们非常方便地就能够新建Xml和读取Xml. 以下是一个样例,新建了一个Xml文档.而且读 ...

  4. Linq to xml 读取xml文件或xml字符串

    XMLFile1.xml: XDocument Contacts = XDocument.Load("XMLFile1.xml"); //XElement Contacts = X ...

  5. C#基础笔记---浅谈XML读取以及简单的ORM实现

    背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...

  6. C#基础---浅谈XML读取以及简单的ORM实现

    背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...

  7. C#操作Xml:linq to xml操作XML

    LINQ to XML提供了更方便的读写xml方式.前几篇文章的评论中总有朋友提,你为啥不用linq to xml?现在到时候了,linq to xml出场了. .Net中的System.Xml.Li ...

  8. linq to xml操作XML(转)

    转自:http://www.cnblogs.com/yukaizhao/archive/2011/07/21/linq-to-xml.html LINQ to XML提供了更方便的读写xml方式.前几 ...

  9. PHP读取xml方法讲解

    一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Marku ...

随机推荐

  1. python txt文件数据转excel

    txt content: perf.txt 2018-11-12 16:48:58 time: 16:48:58 load average: 0.62, 0.54, 0.56 mosquitto CP ...

  2. Django 使用模型的API

    进入项目目录 python3运行 import os os.environ['DJANGO_SETTINGS_MODULE']= '项目.settings' import django django. ...

  3. OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测

    文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 网页性能是一个丰富且又复杂的话题.在本帖中,我们会将讨论的范围局限在前端 JavaScript 框架上,探究相对于另外一种框架而言 ...

  4. Tensorflow实现稀疏自动编码(SAE)

    1.概述 人在获取图像时,并不是像计算机逐个像素去读,一般是扫一眼物体,大致能得到需要的信息,如形状,颜色,特征.怎么让机器也有这项能力呢,稀疏编码来了. 定义: 稀疏自编码器(Sparse Auto ...

  5. UEditor单个图片上传遇到的问题记录

    查看了ueditor.all.js得源代码发现单图片上传是在选择文件输入框change事件执行表单Submit,但是出现一个问题请求头没有加入Cookie,导致后端身份认证失败,上传最终失败. ued ...

  6. InnoDB中锁的模式,锁的查看,算法

    InnoDB中锁的模式   Ⅰ.总览 S行级共享锁lock in share mode X行级排它锁增删改 IS意向共享锁 IX意向排他锁 AI自增锁 Ⅱ.锁之间的兼容性 兼 X IX S IS X ...

  7. nginx 编译安装时的编译参数说明(不建议看)

    https://www.cnblogs.com/wazy/p/8108824.html ./configure --user=www \ #worker进程运行用户 --group=www \ #wo ...

  8. python之列表的常用操作

    Python list 常用方法总结   一,创建列表  只要把逗号分隔的不同的数据项使用方括号([ ])括起来即可 下标(角标,索引)从0开始,最后一个元素的下标可以写-1 list  =  ['1 ...

  9. ccf-20161203--权限查询

    这题我的思路是将用户直接与他的权限联系起来.比如: 用户 角色 权限 Alice hr crm:2直接转变为:Alice: crm:2 题目与代码如下: 问题描述 试题编号: 201612-3 试题名 ...

  10. mybatis使用<choose> <when>

    一.需求 后台使用orcale数据库,mybatis做持久层,前台搜索功能,根据类型搜索,但是数据库中没有类型字段, 所以需要在where条件语句中进行判断,当type == x1 时和type == ...