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 ...
随机推荐
- 《Inside C#》笔记(完) 程序集
程序集内部包含了各种相关的模块.资源文件.配置文件等,将这些在功能上相关的文件整合到单个文件中,以便于部署和维护.使用C#编译器编译程序时,生成的便是程序集. 一.清单数据 a)如果编译的是独立应用程 ...
- 网页html随机切换背景图片
首先要准备一些图像,图像的大小(无论是尺寸大小还是数据大小)要控制好,如果太大,会使用户等不及查看全图就跳出了,如果太小,又会影响页面质量. 在script中将这些图像编为一个数组,便于调用.数组的长 ...
- (后端)如何将数据库的表导出生成Excel?
1.如何通过元数据拿到数据库的信息? 2.如何用Java生成Excel表? 3.将数据库中的表导出生成Excel案例 如何通过元数据拿到数据库的信息 元数据:描述数据的数据 Java中使用元数据的两个 ...
- HBase中此类异常解决记录org.apache.hadoop.ipc.RemoteException(java.io.IOException):
ERROR: Can't get master address from ZooKeeper; znode data == null 一定注意这只是问题的第一层表象,真的问题是: File /hb ...
- SQL Server 全文索引介绍(转载)
概述 全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询.全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中.全文索引是一种特殊类型的基于标记的功能性索引,它是由 ...
- 数据层的多租户浅谈(SAAS多租户数据库设计)
在上一篇“浅析多租户在 Java 平台和某些 PaaS 上的实现”中我们谈到了应用层面的多租户架构,涉及到 PaaS.JVM.OS 等,与之相应的是数据层也有多租户的支持. 数据层的多租户综述 多租户 ...
- python第五十一天----线程,Event,队列
进程与线程的区别: 线程==指令集,进程==资源集 (线程集) 1.同一个进程中的线程共享内存空间,进程与进程之间是独立的 2.同一个进程中的线程是可以直接通讯交流的,进程与间通讯必需通过一个中间的 ...
- python装饰器(新年第一写)
祭奠碌碌无为的2018,想想其实也不算碌碌无为,至少我还搞懂了装饰器,写了一堆有用没用的玩意 原来觉得装饰器挺难的,直到2018年的最后几天,突然就明白了,难道这就是传说中的开天聪么 言归正传,之所以 ...
- Vs .Net Framework 灵活配置
背景:我们开发和部署项目时都是通过注释某些配置项 比如: 在调试时就注释掉生产的配置项,在生产时又要改回来,只有一个还好,如果多的话就会非常容易出错. 问题1:在发布时容易出错,需要控制发布时根据配置 ...
- A - Divisors POJ - 2992 (组合数C的因子数)数学—大数
题意:就是求组合数C的因子的个数! 先说一下自己THL的算法,先把组合数求出来,然后将这个大数分解,得到各个素数的个数,再利用公式!用最快的大数分解算法 分析一下时间复杂度! n1/4但是分析一下 ...