这节将学习如何用 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的更多相关文章

  1. [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL

    此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper支持.net framework4.6.1及 ...

  2. Linq学习之旅——LINQ查询表达式

    1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述 ...

  3. Linq学习(一)-初涉Linq

    一.何谓LINQ LINQ:Language Integrated Query语言集成查询,其本质是对ADO.NET结果集通过反射连同泛型特性转换成对象集,实现OR模型的转换 二.优点与缺点 优点:封 ...

  4. LINQ学习系列-----3.1 查询非泛型集合

    一.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继承了IEnumera ...

  5. LINQ学习系列-----3.1 查询非泛型集合和多个分组

    一.查询非泛型集合 1.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继 ...

  6. Linq学习(五)-多表连接

    本将主要介绍 内连接与 外连接 1.join Linq to sql from a in Blog_Users join b in Blog_UserInfo on a.UserId equals b ...

  7. Oracle 数据库基础学习 (五) 多表查询

    多表查询:查询结果需要用到两个或者以上表,此时需要多表连接,产生多表查询 1.内连接(等值连接) 示例:将两个表内容连接显示 select * from dept d, emp e where d.d ...

  8. Linq学习<四> linq to XML

    LINQ to XML并不打算替代标准的XML API,例如,XML DOM(Document Object Model).Path.XQuery和XSLT等.如果熟悉这些API或当前需要使用或学习它 ...

  9. LINQ to XML LINQ学习第一篇

    LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...

随机推荐

  1. 使用exe4j把java程序生成可执行的.exe文件

    exe4j可以很容易把一个jar打成exe.  下载地址:http://dl.dbank.com/c0owlopqf8 1.下载的安装文件,里面包含一个注册码生成的工具 2.安装exe4j以及破解(注 ...

  2. MySQL 慢查询日志切换

    low_query_log_file日志变得很大,对它进项分析变得很不方便,我们就想按天每天产生一个slow_query_log_file文件,每天分析这个日志文件. 如何按天切割呢? 我们想到了这么 ...

  3. Android 应用获取Jenkins编译的版本号

    Android很多应用的版本号最后都带了编译的版本号.比如说V1.0.0.125,后边的125就通常使用每次编译之后build history的号码,它是逐次增加,这样就可以区分每个细分的编译版本号, ...

  4. Java Thread 多线程同步、锁、通信

    参看:http://www.cnblogs.com/hoojo/archive/2011/05/05/2038101.html

  5. 连接ES的Java项目报Too many open files错误

    启动后查询open files 数量 lsof -p TOMCAT_PID | grep wc -l 结果大概是一千多,但是短短数小时后就会涨到8k以上,所以使用网上很多朋友通过执行ulimit -n ...

  6. 【转】Android编码规范建议18条

    转自:http://www.chinaz.com/design/2015/0908/443732.shtml Android编码规范建议18条 适合手机app设计师和android 工程师阅读. 1. ...

  7. c++获取lua嵌套table某属性的值

    开发环境:vs2012 lua版本:LuaJIT-2.0.2 lua文件作为配置文件,c++读取这个配置. lua配置结构如下 SceneConfig = { [] = { name =}, [] = ...

  8. Disconf实践指南:使用篇

    在上一篇文章Disconf实践指南:安装篇介绍了如何在本地搭建Disconf环境,下面我们介绍如何在项目中使用Disconf.由于某些功能特性对源码做了修改,所以在官方文档并没有提及. 环境基于mac ...

  9. redis存session问题测试内容

    转至元数据起始   官网,现网由于是双节点,session是存储在redis作为共享的. +1是单节点.目前是存储成文件的 本次的问题根源是 由于 session是存储在redis,所造成的. 所以需 ...

  10. django之设置缓存

    缓存 一句话总结:缓存可以对view.模板.数据进行缓存可以设置缓存在不同的地方(本地内存.redis.系统文档)可以为服务器节省性能.减少用户等待时间. 对于中等流量的网站来说,尽可能地减少开销是必 ...