记录下一些读取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. Python 基于python操纵redis入门介绍

    基于python操纵redis入门介绍 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作R ...

  2. 在ASP.NET Core中使用多环境

    原文地址:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.1#star ...

  3. January 20th, 2018 Week 3rd Saturday

    We may encounter many defeats but we must not be defeated. 我们可能会失败很多次,但决不能被打败. As long as we are con ...

  4. 17秋 软件工程 第六次作业 Beta冲刺 总结博客

    题目:团队作业--Beta冲刺 17秋 软件工程 第六次作业 Beta冲刺 总结博客 Beta冲刺过程中各个成员的贡献百分比 世强:15.5% 陈翔:14.5% 树民:12.0% 媛媛:14.0% 港 ...

  5. asp.net core中使用HttpClient实现Post和Get的同步异步方法

     准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本  目录 1.HttpGet方法 2.HttpPost方法 3.使用示例 4. ...

  6. Decentraleyes - Local emulation of Content Delivery Networks

    Decentraleyes, 是一个本地化第三方库文件的浏览器插件,提供三十多种语言支持.大致原理如下: 保存常用的第三方库文件到本地,当打开的页面中需要加载的第三方库文件在本地有副本时,随即进行拦截 ...

  7. Xpath语法-爬虫(一)

    前言 这一章节主要讲解Xpath的基础语法,学习如何通过Xpath获取网页中我们想要的内容;为我们的后面学习Java网络爬虫基础准备工作. 备注:此章节为基础核心章节,未来会在网络爬虫的数据解析环节经 ...

  8. blinker语音控制Arduino/esp8266开关灯-滑动条使用-文本框交互

    总链接:  https://www.arduino.cn/thread-78393-1-1.html 语音控制:https://doc.blinker.app/?file=005-App%E4%BD% ...

  9. AirSim

    https://github.com/Microsoft/AirSim 功能 1 虚拟模拟 2半虚拟模拟 安装教程 环境安装 1安装 cmake 直接下 .exe 2安装cuda 3安装Eigen 3 ...

  10. 转载 c# automapper 使用(一) https://www.cnblogs.com/caoyc/p/6367828.html

    一.最简单的用法 有两个类User和UserDto 1 public class User 2 { 3 public int Id { get; set; } 4 public string Name ...