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的方法,可以根据自己喜欢的方法去用。

时间: 2024-10-22 17:30:35

C#基础巩固(3)-Linq To XML 读取XML的相关文章

Unity3d 新建xml 读取xml

在游戏开发中,Xml经常被用来作为技能配置.地图配置.人物动作配置等配置文件.Unity3d内置的Xml库让我们很方便地就可以新建Xml和读取Xml. 下面是一个例子,新建了一个Xml文档,并且读取它. using UnityEngine; using System.Collections; using System.IO; using System.Xml; using System.Text; public class XmlTest : MonoBehaviour { XmlElement

C# XML 读取xml文件内容并输出到控制台

1 xml文件 2 代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Xml.Linq; 7 8 namespace ConsoleApplication8 9 { 10 class Program 11 { 12 static void Main(string

C#基础笔记---浅谈XML读取以及简单的ORM实现

背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方案之一.下面简单谈谈XML的读取.  一. xml.linq读取xml 1.新建一个data.XML文件 1 <Customers> 2 <Customer> 3 <Name>Frank</Name> 4 <City>成都</City>

C#操作Xml:linq to xml操作XML

LINQ to XML提供了更方便的读写xml方式.前几篇文章的评论中总有朋友提,你为啥不用linq to xml?现在到时候了,linq to xml出场了. .Net中的System.Xml.Linq命名空间提供了linq to xml的支持.这个命名空间中的XDocument,XElement以及XText,XAttribute提供了读写xml文档的关键方法. 1. 使用linq to xml写xml: 使用XDocument的构造函数可以构造一个Xml文档对象:使用XElement对象可

PHP如何读取xml文件?

准备xmlwen文件:a.xml <?xml version="1.0" encoding="UTF-8"?> <humans> <zhangying> <name>张映</name> <sex>男1</sex> <old1>280</old1> </zhangying> <tank> <name>tank</name

PHP读取xml方法介绍

PHP读取xml方法介绍 一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言).Xml是Internet环境中跨平台的... 一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalize

Linq to Xml读取复杂xml(带命名空间)

前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是Linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写.之前做的一个项目有一个很变态的需求:C#项目调用不知道是什么语言写的一个WebService,然后添加服务引用总是失败,通过代理的方式动态调用也总是报错,最后没办法,通过发送原始的WebRequest请求直接得到对方返回的一个xml文件.注意过webservice的wsdl文件的朋友应该知道这个是系统生成的xml文件,有点复杂,研究了半

linq 读取xml文件

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace linq_to_xml { internal class Program { private static void Main(string[] args) { #region XDocument xm

C#基础巩固(2)-Linq To XML创建XML

一.首先要清楚一个正确的XML基本格式是怎样的. 1.后缀名.xml结尾 2.有一行描述 3.有且仅有一个根节点. 如图: 一个正确的xml文件能够被浏览器打开且显示.所以判断一个xml文件有没有错误也可以用浏览器打开看有没有报错. 二.传统的XML创建方式. 命名空间:System.XML 用到的类库:XmlDocument -文档 XmlElement  -元素 XmlAttribute -属性 代码: static void Main(string[] args) { Traditiona