这节将学习如何用 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. FBVector

    folly/FBVector.h Simply replacing std::vector with folly::fbvector (after having included the folly/ ...

  2. 05——wepy框架中的一些细节

    1.wepy组件的编译 wepy中使用一个组件时候,需要先引用(import).再在需要使用该组件的页面(或组件)中声明.例如: import Counter from '/path/to/Count ...

  3. JavaScript中的跨域详解(一)

    同源策略 所谓的同源策略,指的是浏览器对不同源的脚本或者文本访问方式进行的限制. 所谓同源,就是指两个页面具有相同的协议,主机(也常说域名),端口,三个要素缺一不可. 同源政策的目的,是为了保证用户信 ...

  4. Vcf文件格式

    Vcf文件格式是GATK钟爱的表示遗传变异的一种文件格式. 就拿GATK给出的vcf例子说明吧,下面这个文件只表示了一个完整vcf文件的前几个SNP. 看上去确实有点复杂,那就把它分为两部分看吧,第一 ...

  5. Tkinter Colors(颜色)

          Tkinter Colors: Tkinter的代表与字符串的颜色.一般有两种方式来指定Tkinter的颜色 Tkinter的代表与字符串的颜色.一般有两种方式来指定Tkinter的颜色: ...

  6. nginx的下载和安装

    安装 下载必要组件 nginx下载地址 http://nginx.org/en/download.html  pcre库下载地址,nginx需要[解析正则] http://sourceforge.ne ...

  7. Configuring Transitive IPMP on Solaris 11

    http://www.tokiwinter.com/configuring-transitive-ipmp-on-solaris-11/ We all know the pain of configu ...

  8. objective c to pas

    https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol ...

  9. firefox 插件 取消认证签名

    Firebug Tab Mix plus :系统退出自动保存tab List.     tab mix options>Session>start/exit>when browse ...

  10. C/C++字符串查找函数 <转>

    C/C++ string库(string.h)提供了几个字符串查找函数,如下: memchr 在指定内存里定位给定字符 strchr 在指定字符串里定位给定字符 strcspn 返回在字符串str1里 ...