C#基础巩固(3)-Linq To XML 读取XML
记录下一些读取XML的方法,以免到用的时候忘记了,还得花时间去找。
一、传统写法读取XML
现在我有一个XML文件如下:
现在我要查找名字为"王五"的这个人的 Id 和sex(性别) 和age(年龄)
代码:
- static void Main(string[] args)
- {
- XDocument xdoc = XDocument.Load("4.xml"); //加载xml
- List<XElement> eles = new List<XElement>(); //用来获取符合条件的节点集合
- XElement ele = xdoc.Element("root"); //获取根节点
- string nameTxt = "王五"; //要查找的条件
- TraditionalReadXML(ele,eles,nameTxt); //找到符合条件的数据添加到eles的集合里
- foreach (XElement item in eles) //遍历查到的数据,输出
- {
- Console.WriteLine("Id:{0},name:{1},sex:{2},age:{3}",
- item.Attribute("id").Value,item.Element("name").Value,item.Element("sex").Value,item.Element("age").Value);
- }
- Console.ReadKey();
- }
- /// <summary>
- /// 传统读取XML
- /// </summary>
- /// <param name="ele">查到哪个节点下的数据</param>
- /// <param name="eles">集合存放符合的数据</param>
- /// <param name="nameTxt">要查找的姓名</param>
- private static void TraditionalReadXML(XElement ele,List<XElement> eles,string nameTxt)
- {
- //首先遍历ele下的所有子节点,注意是子节点,不能查到下下层的节点
- foreach (XElement item in ele.Elements())
- {
- //判断这个元素的名字是不是name,如果是name,看内容是不是nameTxt
- if (item.Name.LocalName == "name")
- {
- if (item.Value == nameTxt)
- {
- //符合条件的节点,取其父级
- eles.Add(item.Parent);
- }
- }
- //如果item里面还有子节点就递归
- TraditionalReadXML(item, eles, nameTxt);
- }
- }
执行代码得到的结果为:
二、Linq写法读取XML
把上面的代码改成:
- static void Main(string[] args)
- {
- XDocument xdoc = XDocument.Load("4.xml"); //加载xml
- List<XElement> eles = new List<XElement>(); //获取符合条件的节点集合
- string nameTxt = "王五"; //要查找的条件
- //获得符合条件的节点
- var query = from s in xdoc.Descendants()
- where s.Name.LocalName == "name" && s.Value ==nameTxt
- select s.Parent;
- foreach (XElement item in query) //把符合条件的节点添加到eles集合
- {
- eles.Add(item);
- }
- foreach (XElement item in eles) //遍历查到的数据,输出
- {
- Console.WriteLine("Id:{0},name:{1},sex:{2},age:{3}",
- item.Attribute("id").Value,item.Element("name").Value,item.Element("sex").Value,item.Element("age").Value);
- }
- Console.ReadKey();
}
加粗的地方为linq写法,它们的实现是一样的,这样会比普通的写法简单许多。
三、Linq查询lambda写法
把代码改成:
- static void Main(string[] args)
- {
- XDocument xdoc = XDocument.Load("4.xml"); //加载xml
- List<XElement> eles = new List<XElement>(); //获取符合条件的节点集合
- string nameTxt = "王五"; //要查找的条件
- //遍历节点,把符合条件的添加到 eles集合
- foreach (XElement i in xdoc.Descendants().Where(e=>{
- if(e.Name.LocalName=="name")
- {
- if(e.Value==nameTxt)
- {
- return true ;
- }
- }
- return false;
- }))
- {
- eles.Add(i.Parent);
- }
- foreach (XElement item in eles) //遍历查到的数据,输出
- {
- Console.WriteLine("Id:{0},name:{1},sex:{2},age:{3}",
- item.Attribute("id").Value,item.Element("name").Value,item.Element("sex").Value,item.Element("age").Value);
- }
- Console.ReadKey();
- }
以上是三种读取XML的方法,可以根据自己喜欢的方法去用。
C#基础巩固(3)-Linq To XML 读取XML的更多相关文章
- Linq to XML 读取XML 备忘笔记
本文转载:http://www.cnblogs.com/infozero/archive/2010/07/13/1776383.html Linq to XML 读取XML 备忘笔记 最近一个项目中有 ...
- C#使用Linq To XML读取XML,Linq生成XML,Linq创建带属性或带节点XML
using System; using System.Linq; using System.Xml.Linq; namespace Sample2 { class Program { static v ...
- Unity3d 新建xml 读取xml
在游戏开发中.Xml常常被用来作为技能配置.地图配置.人物动作配置等配置文件. Unity3d内置的Xml库让我们非常方便地就能够新建Xml和读取Xml. 以下是一个样例,新建了一个Xml文档.而且读 ...
- Linq to xml 读取xml文件或xml字符串
XMLFile1.xml: XDocument Contacts = XDocument.Load("XMLFile1.xml"); //XElement Contacts = X ...
- C#基础笔记---浅谈XML读取以及简单的ORM实现
背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...
- C#基础---浅谈XML读取以及简单的ORM实现
背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...
- C#操作Xml:linq to xml操作XML
LINQ to XML提供了更方便的读写xml方式.前几篇文章的评论中总有朋友提,你为啥不用linq to xml?现在到时候了,linq to xml出场了. .Net中的System.Xml.Li ...
- linq to xml操作XML(转)
转自:http://www.cnblogs.com/yukaizhao/archive/2011/07/21/linq-to-xml.html LINQ to XML提供了更方便的读写xml方式.前几 ...
- PHP读取xml方法讲解
一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Marku ...
随机推荐
- 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 ...
- Django 使用模型的API
进入项目目录 python3运行 import os os.environ['DJANGO_SETTINGS_MODULE']= '项目.settings' import django django. ...
- OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测
文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 网页性能是一个丰富且又复杂的话题.在本帖中,我们会将讨论的范围局限在前端 JavaScript 框架上,探究相对于另外一种框架而言 ...
- Tensorflow实现稀疏自动编码(SAE)
1.概述 人在获取图像时,并不是像计算机逐个像素去读,一般是扫一眼物体,大致能得到需要的信息,如形状,颜色,特征.怎么让机器也有这项能力呢,稀疏编码来了. 定义: 稀疏自编码器(Sparse Auto ...
- UEditor单个图片上传遇到的问题记录
查看了ueditor.all.js得源代码发现单图片上传是在选择文件输入框change事件执行表单Submit,但是出现一个问题请求头没有加入Cookie,导致后端身份认证失败,上传最终失败. ued ...
- InnoDB中锁的模式,锁的查看,算法
InnoDB中锁的模式 Ⅰ.总览 S行级共享锁lock in share mode X行级排它锁增删改 IS意向共享锁 IX意向排他锁 AI自增锁 Ⅱ.锁之间的兼容性 兼 X IX S IS X ...
- nginx 编译安装时的编译参数说明(不建议看)
https://www.cnblogs.com/wazy/p/8108824.html ./configure --user=www \ #worker进程运行用户 --group=www \ #wo ...
- python之列表的常用操作
Python list 常用方法总结 一,创建列表 只要把逗号分隔的不同的数据项使用方括号([ ])括起来即可 下标(角标,索引)从0开始,最后一个元素的下标可以写-1 list = ['1 ...
- ccf-20161203--权限查询
这题我的思路是将用户直接与他的权限联系起来.比如: 用户 角色 权限 Alice hr crm:2直接转变为:Alice: crm:2 题目与代码如下: 问题描述 试题编号: 201612-3 试题名 ...
- mybatis使用<choose> <when>
一.需求 后台使用orcale数据库,mybatis做持久层,前台搜索功能,根据类型搜索,但是数据库中没有类型字段, 所以需要在where条件语句中进行判断,当type == x1 时和type == ...