Linq学习<五> 运用linq查询Xml
这节将学习如何用 linq查询xml
一、我们先看看在xml中我们怎么操作
public void xmlWayToQueryXmlFile()
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("../../xmlFile.xml"); XmlNode root = xmldoc.DocumentElement;
XmlNode node = root.SelectSingleNode("custom[id='100']");
Console.Write(node.InnerText);
}
这是在using system.xml条件下查询xml中id=100的node下所有的innerText
关于在xml中查询方法,这里讲的比较详细http://www.cnblogs.com/fjsnail/archive/2012/10/20/2732127.html
二、我们看看用linq又怎么操作
函数一: Elements()返回XML文档或片段中的所有第一级元素。对于有效的XML文档,例如,刚才创
建的NorthwindCustomerOrders.xml文件,只有一个第一级元素,即根元素customers
public void queryXml()
{
string filePath = "../../xmlFile.xml";
XDocument xdoc = XDocument.Load(filePath); var result = from item in xdoc.Elements()
select item.Name; foreach(var i in result)
{
Console.WriteLine(i);
} }
当时如果把select item.Name 改为select.value 则显示的是所有innerText,如果改为select item ,那么显示是所有xml文档
函数二:Descendants()返回XML文档或片段中的所有子元素(所有级别的子元素)
public void queryXmlByDescendants()
{
string filePath = "../../xmlFile.xml"; <custom>
XDocument xdoc = XDocument.Load(filePath); <id>1</id>
<name>gougou</name>
var result = from item in xdoc.Descendants() <age>23</age>
// select item.Value; //显示所有子元素的值 </custom>
select item.Name; //显示所有子元素的标签
foreach (var i in result)
{
Console.WriteLine(i);
} }
注意:select item.Value时,如果xml像上面右侧那样 显示的结果是1gougou23 1 gougou 23 (应该是先显示custom级的value,把下面的子节点value全部显示出来,再循环到下面的子节点,显示单个子节点的value)
当然可以加distict 除掉重复的值
foreach (var i in result.Distinct())
{
Console.WriteLine(i);
}
这样就可以显示所有id的值
var result = from item in xdoc.Descendants("id")
select item.Value; //显示所有子元素的值
函数三 Attributes(),它返回当前选中元素的所有特性
对于行如这样的xml
<custom sequence="1" boolChange="false">
<id>0</id>
<name>nihao</name>
<age>112</age>
</custom>
public void queryXmlByAttributes()
{
string filePath = "../../xmlFile.xml";
XDocument xdoc = XDocument.Load(filePath); var result = from item in xdoc.Descendants("custom").Attributes()
select item; //显示所有子元素的值 foreach (var i in result)
{
Console.WriteLine(i);
} }
上面代码显示的是:sequence="1"boolChange="false"
如果把 select item改为select item.name 则输出:sequence boolchange
如果该为select item.value 则输出1 false
总结:xml的操作方法有多种,不仅可以用xml 本身提供的api,还可以用linq to xml ,各有各的好处,相比二样linq更方便
在使用之前,记得要添加:
using System.Linq;
using System.Xml.Linq
using System.Xml;
Linq学习<五> 运用linq查询Xml的更多相关文章
- [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL
此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper支持.net framework4.6.1及 ...
- Linq学习之旅——LINQ查询表达式
1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述 ...
- Linq学习(一)-初涉Linq
一.何谓LINQ LINQ:Language Integrated Query语言集成查询,其本质是对ADO.NET结果集通过反射连同泛型特性转换成对象集,实现OR模型的转换 二.优点与缺点 优点:封 ...
- LINQ学习系列-----3.1 查询非泛型集合
一.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继承了IEnumera ...
- LINQ学习系列-----3.1 查询非泛型集合和多个分组
一.查询非泛型集合 1.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继 ...
- Linq学习(五)-多表连接
本将主要介绍 内连接与 外连接 1.join Linq to sql from a in Blog_Users join b in Blog_UserInfo on a.UserId equals b ...
- Oracle 数据库基础学习 (五) 多表查询
多表查询:查询结果需要用到两个或者以上表,此时需要多表连接,产生多表查询 1.内连接(等值连接) 示例:将两个表内容连接显示 select * from dept d, emp e where d.d ...
- Linq学习<四> linq to XML
LINQ to XML并不打算替代标准的XML API,例如,XML DOM(Document Object Model).Path.XQuery和XSLT等.如果熟悉这些API或当前需要使用或学习它 ...
- LINQ to XML LINQ学习第一篇
LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...
随机推荐
- Linux系统启动流程与系统目录
启动流程 # 1,开机BIOS自检 检查一系列的硬件,最后根据启动顺序启动,是硬盘还是光驱等 # 2,MBR引导 读硬盘0柱面0磁道1扇区的前446字节 1扇区=512字节 MBR=4446字节 四个 ...
- 【BZOJ】2818: Gcd(欧拉函数+质数)
题目 传送门:QWQ 分析 仪仗队 呃,看到题后感觉很像上面的仪仗队. 仪仗队求的是$ gcd(a,b)=1 $ 本题求的是$ gcd(a,b)=m $ 其中m是质数 把 $ gcd(a,b)=1 $ ...
- thymeleaf switch在表格中的使用,遇到的空行问题
switch在表格中的使用时 如果把<td>写在<div th:switch="${data.isShow}"> 里面导致外面出现很多空的<div&g ...
- dubbo 梗概及使用示例
阿里巴巴dubbo主页:http://code.alibabatech.com/wiki/display/dubbo/Home-zh 1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提 ...
- 华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)
题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出乘积,如:151851741 样例输入: 1234567 123 样例输出: 1518 ...
- python变量、引用、拷贝之间的关系
Python中一切皆为对象,不管是集合变量还是数值型or字符串型的变量都是一个引用,都指向对应内存空间中的对象. 简而言之: 变量直接赋值:新变量本身及其内部的元素都与原变量指向相同的内存空间,并且值 ...
- 【图片】机器学习--名画风格 neural-style
neural-style 学习画作风格,将风格施加到另外一张图片中 例如将名画<星夜>的风格施加到一副建筑照片中: 源码 https://github.com/jcjohnson/neur ...
- Linux内核系统调用列表
一.进程控制: fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtablesize 进程所能打开的最 ...
- TRegEx 正则表达式
TRegEx #include <System.RegularExpressions.hpp> void __fastcall TForm1::Button1Click(TObject * ...
- 解决git报ssh variant 'simple' does not support setting port
解决办法 在git bash中输入命令 git config --global ssh.variant ssh