记录下一些读取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. Asp.Net Core 使用Quartz基于界面画接口管理做定时任务

    今天抽出一点点时间来造一个小轮子,是关于定时任务这块的. 这篇文章主要从一下几点介绍: 创建数据库管理表 创建web项目 引入quarzt nuget 包 写具体配置操作,实现定时任务处理 第一步:创 ...

  2. python包中__init__.py的作用

    1.__init__.py定义包的属性和方法 一般为空文件,但是必须存在,没有__init__.py表明他所在的目录只是目录不是包 2.导入包的时候使用 例如有一个test目录,test下有xx1.p ...

  3. 扩展BootstapTable支持TreeGrid

    (function ($) { 'use strict'; var sprintf = function (str) { var args = arguments, flag = true, i = ...

  4. SQL SERVER孤立帐号的处理

    Step1:查询 Use KSHR_F23 Go exec sp_change_users_login @Action='Report' Go Step2:处理 Use KSHR_F23 Go exe ...

  5. Unity LayerMask 的位运算

    Unity的Layer Unity是用 int32来表示32个Layer层,int32用二进制来表示一共有32位. 0000 0000 0000 0000 0000 0000 0000 0000 31 ...

  6. 第一章 Hyper-V 2012 R2角色部署

      在windows server 2012 R2中,我们可以通过安装hyper-v角色来完成虚拟化底层架构的部署.除了图形界面的安装,也可以使用单独的发行版Hyper-V Server 2012 R ...

  7. JavaScript 中的匿名函数((function() {})();)与变量的作用域

    以前都是直接用前端框架Bootstrap,突然想看看Javascript,发现javascript是个非常有趣的东西,这里把刚碰到的一个小问题的理解做下笔录(废话不多说,上代码). /** * Exa ...

  8. zk理解(转载自邬兴亮---www.cnblogs.com/wuxl360/p/5817471.html)

    一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的 ...

  9. C# X509Certificate类 调用证书

    一.命名空间 using System.Security.Cryptography.X509Certificates; 二.调用代码 string certPath = Server.MapPath( ...

  10. js常见错误类型

    (1)SyntaxError SyntaxError是解析代码时发生的语法错误 // 变量名错误 var 1a; // 缺少括号 console.log 'hello'); (2)ReferenceE ...