记录下一些读取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的更多相关文章

  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. loadrunner 脚本优化-关联函数web_reg_save_param()函数详解

    脚本优化-关联函数web_reg_save_param()函数详解   by:授客 QQ:1033553122 Insert->New Step,打开Add Step对话框 选择函数web_re ...

  2. 你不可不知的Java引用类型之——弱引用

    定义 弱引用是使用WeakReference创建的引用,弱引用也是用来描述非必需对象的,它是比软引用更弱的引用类型.在发生GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收. 说明 弱 ...

  3. 分享MYSQL中的各种高可用技术

    分享MYSQL中的各种高可用技术 图片和资料来源于姜承尧老师(MYSQL技术内幕作者) mysql高可用各个技术的比较 数据库的可靠指的是数据可靠 数据库可用指的是数据库服务可用 可靠的是数据:例如工 ...

  4. C#异常--System.IO.FileLoadException:“混合模式程序集是针对“v2.0.50727”版的运行时生成的错误

    异常信息: System.IO.FileLoadException:“混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集.” ...

  5. CTR预估中GBDT与LR融合方案

    1. 背景 CTR预估(Click-Through Rate Prediction)是互联网计算广告中的关键环节,预估准确性直接影响公司广告收入.CTR预估中用的最多的模型是LR(Logistic R ...

  6. LNMP环境搭建详细教程

    之前有一篇博客写的是LAMP的环境搭建,今天来详细介绍一下另外一个模式——LNMP=Linux+Nginx+MySQL+PHP. 一.在Linux系统下nginx的安装过程,先到http://ngin ...

  7. 启动Myeclipse报错“Failed to create the Java Virtual Machine”的解决办法

    我安装的是Myeclipse 10.7.1.装上好久没用,今天启动突然报错:Failed to create the Java Virtual Machine. 检查Myeclipse安装好使用时好的 ...

  8. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  9. web自动化-窗口句柄及位置变化

    在进行web自动化时,很容易会遇到多窗口进行切换测试,下面就对多窗口的一些句柄和切换及窗口句柄顺序简单总结一下 from selenium import webdriver driver = webd ...

  10. Flex布局新写法兼容写法详解

    很久之前用过flex,但是没有考虑过兼容性问题,为了兼容ios一定要加上-webkit前缀: ul{ display: flex; /* 新版本语法: Opera 12.1, Firefox 22+ ...