日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#操作xml文件之Linq?To?Xml詳解_C#教程

作者:Csharp小記 ? 更新時間: 2022-12-26 編程語言

文章描述

之前有寫過讀取xml文件的三個方式,今天再來加一個(其實說寫好久了一直忘記。),即Linq To Xml,其實如果有看過我前面寫的相關文章的代碼的話,會發現在需要操作xml的地方,或多或少的都使用了這個方式。

Linq To Xml,不看其他,單純的看名字都能感覺到,其可以使用靈活且強大的Linq語法,同時也可以使用lambda以及Xpath定位。所以,在操作xml文件的選擇上,也是上上之選。

以下就通過之前寫自動更新程序的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");
        }

實現效果

代碼解析:在XmlHelper中,分別使用了linq、lambda和xpath等方式去操作xml文件的節點,同時無論是從AttributeValue還是value都有做了舉例,基本可以滿足日常使用;Linq To Xml的使用需要引入命名空間using System.Xml.Linq;

原文鏈接:https://mp.weixin.qq.com/s/b1FNGYNbqlwF2-GiHqaJEw

欄目分類
最近更新