C#操作xml文件之Linq To Xml详解 茶杯狐

   2023-02-09 学习力0
核心提示:目录文章描述开发环境开发工具实现代码实现效果文章描述之前有写过读取xml文件的三个方式,今天再来加一个(其实说写好久了一直忘记。),即Linq To Xml,其实如果有看过我前面写的相关文章的代码的话,会发现在需要操作xml的地方,或多或少的都使用了这个方

文章描述

之前有写过读取xml文件的三个方式,今天再来加一个(其实说写好久了一直忘记。),即Linq To Xml,其实如果有看过我前面写的相关文章的代码的话,会发现在需要操作xml的地方,或多或少的都使用了这个方式。

Linq To Xml,不看其他,单纯的看名字都能感觉到,其可以使用灵活且强大的Linq语法,同时也可以使用lambda以及Xpath定位。所以,在操作xml文件的选择上,也是上上之选。

以下就通过之前写自动更新程序的xml文件拿来做举例(其实在自动更新程序中已经使用过了)。

C#操作xml文件之Linq To Xml详解

开发环境

.NET Framework版本:4.5

开发工具

 Visual Studio 2013

实现代码

 public class XmlHelper
    {
        readonly string _xmlPath;
        public XmlHelper(string xmlPath)
        {
            _xmlPath = xmlPath;
        }

        /// <summary>
        /// 逐级读取
        /// </summary>
        /// <returns></returns>
        public string ReadUrl()
        {
            XDocument xdoc = XDocument.Load(_xmlPath);
            string url = xdoc.Root.Element("url").Value;
            return url;
        }

        /// <summary>
        /// XPath读取
        /// </summary>
        /// <returns></returns>
        public string ReadVersion()
        {
            XDocument xdoc = XDocument.Load(_xmlPath);
            string version = xdoc.XPathSelectElement("updateList/version").Value;
            return version;
        }

        /// <summary>
        /// Lambda读取
        /// </summary>
        /// <returns></returns>
        public string FileNames()
        {
            XDocument xdoc = XDocument.Load(_xmlPath);
            string names = string.Join(",", xdoc.Root.Elements("files").Descendants("file").Select(s => s.Attribute("name").Value));
            return names;
        }

        /// <summary>
        /// linq读取
        /// </summary>
        /// <returns></returns>
        public string FileVersions()
        {
            XDocument xdoc = XDocument.Load(_xmlPath);
            var versions = from elem in xdoc.Root.Elements("files").Descendants("file") select elem.Attribute("version").Value;
            return string.Join(",", versions);

        }

        /// <summary>
        /// 添加节点
        /// </summary>
        public void AddFile()
        {
            XDocument xdoc = XDocument.Load(_xmlPath);

            XElement addXele = new XElement("file");
            addXele.SetAttributeValue("name", "test.dll");
            addXele.SetAttributeValue("version", "2.00");

            xdoc.Root.Element("files").Add(addXele);
            xdoc.Save(_xmlPath);
        }

        /// <summary>
        /// 修改节点
        /// </summary>
        /// <param name="name"></param>
        /// <param name="version"></param>
        public void UpdateFile(string name, string version)
        {
            XDocument xdoc = XDocument.Load(_xmlPath);

            XElement xele = xdoc.Root.Elements("files").Descendants("file").FirstOrDefault(s => s.Attribute("name").Value == name);
            xele.SetAttributeValue("version", version);
            xdoc.Save(_xmlPath);
        }

        /// <summary>
        /// 删除节点
        /// </summary>
        /// <param name="name"></param>
        public void DeleteFile(string name)
        {
            XDocument xdoc = XDocument.Load(_xmlPath);
            XElement xele = xdoc.Root.Elements("files").Descendants("file").FirstOrDefault(s => s.Attribute("name").Value == name);
            xele.Remove();
            xdoc.Save(_xmlPath);
        }
    }
string xmlPath = Application.StartupPath + "\\UpdateList.xml";

        private void btn_readxml_Click(object sender, EventArgs e)
        {
            text_xml.Text = File.ReadAllText(xmlPath);
        }

        private void btn_property_Click(object sender, EventArgs e)
        {
            XmlHelper xml = new XmlHelper(xmlPath);
            StringBuilder builder = new StringBuilder();
            builder.AppendLine("Url:" + xml.ReadUrl());
            builder.AppendLine("Version:" + xml.ReadVersion());
            builder.AppendLine("Names:" + xml.FileNames());
            builder.AppendLine("Versions:" + xml.FileVersions());

            text_property.Text = builder.ToString();
        }

        private void btn_add_Click(object sender, EventArgs e)
        {
            XmlHelper xml = new XmlHelper(xmlPath);
            xml.AddFile();
        }

        private void btn_update_Click(object sender, EventArgs e)
        {
            XmlHelper xml = new XmlHelper(xmlPath);
            xml.UpdateFile("test.dll", "3.00");
        }

        private void btn_delete_Click(object sender, EventArgs e)
        {
            XmlHelper xml = new XmlHelper(xmlPath);
            xml.DeleteFile("test.dll");
        }

实现效果

C#操作xml文件之Linq To Xml详解

代码解析:在XmlHelper中,分别使用了linq、lambda和xpath等方式去操作xml文件的节点,同时无论是从AttributeValue还是value都有做了举例,基本可以满足日常使用;Linq To Xml的使用需要引入命名空间using System.Xml.Linq;

原文地址:https://mp.weixin.qq.com/s/b1FNGYNbqlwF2-GiHqaJEw
 
标签: C# Linq To Xml
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

点击排行