zoukankan      html  css  js  c++  java
  • 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的方法,可以根据自己喜欢的方法去用。

  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/wei325/p/4897383.html
Copyright © 2011-2022 走看看