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 ...
随机推荐
- loadrunner 脚本优化-关联函数web_reg_save_param()函数详解
脚本优化-关联函数web_reg_save_param()函数详解 by:授客 QQ:1033553122 Insert->New Step,打开Add Step对话框 选择函数web_re ...
- 你不可不知的Java引用类型之——弱引用
定义 弱引用是使用WeakReference创建的引用,弱引用也是用来描述非必需对象的,它是比软引用更弱的引用类型.在发生GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收. 说明 弱 ...
- 分享MYSQL中的各种高可用技术
分享MYSQL中的各种高可用技术 图片和资料来源于姜承尧老师(MYSQL技术内幕作者) mysql高可用各个技术的比较 数据库的可靠指的是数据可靠 数据库可用指的是数据库服务可用 可靠的是数据:例如工 ...
- C#异常--System.IO.FileLoadException:“混合模式程序集是针对“v2.0.50727”版的运行时生成的错误
异常信息: System.IO.FileLoadException:“混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集.” ...
- CTR预估中GBDT与LR融合方案
1. 背景 CTR预估(Click-Through Rate Prediction)是互联网计算广告中的关键环节,预估准确性直接影响公司广告收入.CTR预估中用的最多的模型是LR(Logistic R ...
- LNMP环境搭建详细教程
之前有一篇博客写的是LAMP的环境搭建,今天来详细介绍一下另外一个模式——LNMP=Linux+Nginx+MySQL+PHP. 一.在Linux系统下nginx的安装过程,先到http://ngin ...
- 启动Myeclipse报错“Failed to create the Java Virtual Machine”的解决办法
我安装的是Myeclipse 10.7.1.装上好久没用,今天启动突然报错:Failed to create the Java Virtual Machine. 检查Myeclipse安装好使用时好的 ...
- PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记
PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...
- web自动化-窗口句柄及位置变化
在进行web自动化时,很容易会遇到多窗口进行切换测试,下面就对多窗口的一些句柄和切换及窗口句柄顺序简单总结一下 from selenium import webdriver driver = webd ...
- Flex布局新写法兼容写法详解
很久之前用过flex,但是没有考虑过兼容性问题,为了兼容ios一定要加上-webkit前缀: ul{ display: flex; /* 新版本语法: Opera 12.1, Firefox 22+ ...