您的位置:

C#读取XML文件详解

XML(可扩展标记语言)是一种常用于数据交换的格式,它比较灵活,对于不同的应用场景,可以定制不同的XML结构。C#作为一种通用、面向对象的编程语言,在读取XML文件方面有着很强大的功能。本文将从不同的角度,详细阐述C#读取XML文件的方法和技巧。

一、CBA赛程

对于C#开发人员来说,读取CBA赛程XML文件是一个常见的需求。下面是一个简单的XML结构,它描述了2019-2020赛季的CBA比赛安排:

<?xml version="1.0" encoding="utf-8" ?>
<schedule>
  <game date="2020-01-05">
    <home>北京首钢</home>
    <away>四川男篮</away>
  </game>
  <game date="2020-01-10">
    <home>上海大鲨鱼</home>
    <away>天津荣钢</away>
  </game>
</schedule>

为了读取这个XML文件,我们可以使用C#的System.Xml命名空间提供的XmlDocument类。

using System.Xml;

class Program {
  static void Main(string[] args) {
    XmlDocument doc = new XmlDocument();
    doc.Load("schedule.xml");

    XmlNodeList games = doc.GetElementsByTagName("game");
    foreach (XmlNode game in games) {
        string date = game.Attributes["date"].Value;
        string home = game["home"].InnerText;
        string away = game["away"].InnerText;
        Console.WriteLine("{0} : {1} vs {2}", date, home, away);
    }
  }
}

以上代码首先加载XML文档,使用GetElementsByTagName方法获取所有game节点,循环处理每个节点,读取date、home、away元素的文本内容,并将信息输出到控制台。

二、Coach

XML文件不仅可以用于存储数据,还可以表示对象的属性和方法。下面是一个Coach.xml文件,它描述了一个教练对象。

<?xml version="1.0" encoding="utf-8" ?>
<Coach name="Gregg Popovich">
  <Age>71</Age>
  <Team>San Antonio Spurs</Team>
  <Seasons>23</Seasons>
  <Championships>5</Championships>
</Coach>

为了读取该XML文件,我们需要先定义一个Coach类,其中包含name、age、team、seasons和championships属性:

class Coach {
    public string Name;
    public int Age;
    public string Team;
    public int Seasons;
    public int Championships;
}

然后,我们可以使用C#的System.Xml.Serialization命名空间提供的XmlSerializer类,将XML文件反序列化为Coach对象。

using System.Xml.Serialization;
using System.IO;

class Program {
    static void Main(string[] args) {
        XmlSerializer serializer = new XmlSerializer(typeof(Coach));
        StreamReader reader = new StreamReader("Coach.xml");
        Coach coach = (Coach)serializer.Deserialize(reader);
        Console.WriteLine("{0} ({1}), {2} / {3} seasons, {4} championships", coach.Name, coach.Age, coach.Team, coach.Seasons, coach.Championships);
    }
}

以上代码首先创建了一个XmlSerializer对象,然后使用StreamReader读取Coach.xml文件内容,将XML文件反序列化为Coach对象,并将信息输出到控制台。

三、CCTV5节目表

CCTV5是中国中央电视台的一个体育频道,它每天会有大量的体育节目。下面是一个CCTV5.xml文件,它描述了2019年12月份的节目表。

<?xml version="1.0" encoding="utf-8" ?>
<schedule month="12">
  <program time="2019-12-01 06:00">
    <name>运动健康</name>
    <type>健康</type>
  </program>
  <program time="2019-12-01 08:00">
    <name>CBA常规赛</name>
    <type>篮球</type>
  </program>
  <program time="2019-12-01 12:00">
    <name>足球之夜</name>
    <type>足球</type>
  </program>
</schedule>

为了读取该XML文件,我们可以使用LINQ to XML。首先,我们需要引用System.Xml.Linq命名空间,然后使用XDocument.Load方法加载XML文件。

using System.Xml.Linq;

class Program {
    static void Main(string[] args) {
        XDocument doc = XDocument.Load("CCTV5.xml");

        var query = from p in doc.Descendants("program")
                    where (DateTime)p.Attribute("time") >= DateTime.Today
                    select new {
                        time = (DateTime)p.Attribute("time"),
                        name = (string)p.Element("name"),
                        type = (string)p.Element("type")
                    };

        foreach (var program in query) {
            Console.WriteLine("{0} : {1} ({2})", program.time.ToShortTimeString(), program.name, program.type);
        }
    }
}

以上代码使用LINQ to XML的语法,查询出所有今天及以后的节目,并将结果输出到控制台。

四、Chat GPT人工智能

Chat GPT是一种基于自然语言处理的人工智能,它可以模拟人类对话,提供普适性和个性化的服务。我们可以使用XML文件存储Chat GPT的训练数据。下面是一个chat.xml文件,它包含了一些问答对。

<?xml version="1.0" encoding="utf-8" ?>
<qa>
  <pair>
    <question>你叫什么名字?</question>
    <answer>我叫 Chat GPT。</answer>
  </pair>
  <pair>
    <question>你会什么语言?</question>
    <answer>我会中文、英文、法语、德语、日语、韩语等多种语言。</answer>
  </pair>
</qa>

为了读取该XML文件,我们可以使用LINQ to XML。首先,我们需要定义一个QAPair类,该类包含question和answer两个属性:

class QAPair {
    public string Question;
    public string Answer;
}

然后,我们可以使用LINQ to XML查询出所有问答对,并将它们存储在一个List 中。

using System.Xml.Linq;

class Program {
    static void Main(string[] args) {
        XDocument doc = XDocument.Load("chat.xml");

        var query = from p in doc.Descendants("pair")
                    select new QAPair {
                        Question = (string)p.Element("question"),
                        Answer = (string)p.Element("answer")
                    };

        List qaPairs = query.ToList();
    }
}

  

以上代码使用LINQ to XML的语法,查询出所有问答对,并将它们存储在一个List 中,以便后续训练和使用。

五、CCTV5在线直播

XML文件还可以用于Web应用程序的开发。下面是一个cctv5.xml文件,它描述了CCTV5的在线直播地址。

<?xml version="1.0" encoding="utf-8" ?>
<channels>
  <channel name="cctv5">
    <url>http://cctv5.livecdn.biz/cctv5_800/index.m3u8</url>
  </channel>
  <channel name="cctv5+">
    <url>http://cctv5plus.livecdn.biz/cctv5plus_800/index.m3u8</url>
  </channel>
</channels>

为了读取该XML文件,我们可以使用C#的System.Net.Http命名空间提供的HttpClient类,请求XML文件,并使用LINQ to XML提取其中的直播地址。

using System.Net.Http;
using System.Xml.Linq;

class Program {
    static void Main(string[] args) {
        HttpClient client = new HttpClient();
        HttpResponseMessage response = client.GetAsync("http://example.com/cctv5.xml").Result;
        string xml = response.Content.ReadAsStringAsync().Result;

        XDocument doc = XDocument.Parse(xml);
        XElement channel = doc.Descendants("channel").FirstOrDefault(c => c.Attribute("name").Value == "cctv5");
        string url = channel.Element("url").Value;

        Console.WriteLine(url);
    }
}

以上代码使用HttpClient发送HTTP请求,获取XML文件内容,使用LINQ to XML提取channel节点,读取其url元素的文本内容,并将直播地址输出到控制台。

六、C1驾照能开什么车

XML文件还可以用于实现数据查询。下面是一个c1.xml文件,它列出了C1驾照能开的车辆类型。

<?xml version="1.0" encoding="utf-8" ?>
<driving_license>
  <license_type>C</license_type>
  <vehicle_type>汽车、普通三轮摩托车</vehicle_type>
  <min_age>18</min_age>
  <engine_displacement>不限</engine_displacement>
  <transmission_type>不限</transmission_type>
</driving_license>

为了读取该XML文件,我们可以使用LINQ to XML。下面的代码演示了如何读取C1驾照能开的车辆类型:

using System.Xml.Linq;

class Program {
    static void Main(string[] args) {
        XDocument doc = XDocument.Load("c1.xml");

        var query = from p in doc.Descendants("licensed_type")
                    where (string)p == "C"
                    select new {
                        vehicle_type = (string)p.Element("vehicle_type"),
                    };

        foreach (var item in query) {
            Console.WriteLine(item.vehicle_type);
        }
    }
}

以上代码使用LINQ to XML的语法,查询出所有C1驾照能开的车辆类型,并将结果输出到控制台。

七、C反应蛋白高说明什么

XML文件还可以用于存储医学数据。下面是一个c反应蛋白.xml文件,它描述了C反应蛋白(CRP)与炎症反应的关系。

<?xml version="1.0" encoding="utf-8" ?>
<crp>
  <result range="mg/L">
    <low>0.00</low>
    <high>3.00</high>
  </result>
  <explanation>
    <p>正常血清CRP水平约为低于10mg/L,病原菌引起的急性炎症或组织坏死时,CRP可能会增加到1000mg/L。浓度>10mg/L可能为感染性疾病。</p>
  </explanation>
</crp>

为了读取该