• 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;
  • 相关阅读:
    使用 connect http proxy 绕过 ssh 防火墙限制
    Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案
    Mac 下 Chrome 浏览器 ERR_NETWORK_CHANGED 报错解决方案
    SCSS & SASS Color 颜色函数用法
    eggjs 框架代理调试 SELF_SIGNED_CERT_IN_CHAIN 报错解决方案
    【转】谷歌安装Axure浏览器插件
    js 图片转base64并压缩
    ajax请求
    postman如何重置账号的密码
    解决url中&times会被转成×的问题
  • 原文地址:https://www.cnblogs.com/fjsnail/p/3228924.html
Copyright © 2020-2023  润新知