Linq To Xml操做XML增刪改查

對XML文件的操做在平時項目中常常要運用到,好比用於存放一些配置相關的內容;本文將簡單運用Linq TO Xml對XML進行操做,主要講解對XML的建立、加載、增長、查詢、修改以及刪除;重點在於類XDocument、類XElement;本實例是在控制檯程序運行,因此對加載的XML文件路徑要注意,若XML文件不是代碼自運建立時要設置其「複製到輸出目錄」-始終複製asp.net

1:首先看一下實例要加載的XML文件格式:ui

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <User>
    <UserID>1</UserID>
    <UserName>踏浪帥</UserName>
  </User>
  <User>
    <UserID>2</UserID>
    <UserName>wujunyang</UserName>
  </User>
  <User>
    <UserID>3</UserID>
    <UserName>cnblogs</UserName>
  </User>
</Root>

 

2:[加載XML]加載XML文件的內容,假如XML文件不存在則建立一個CreateXmlFile(XmlFile):spa

            string XmlFile=Directory.GetCurrentDirectory()+"//XmlFile//UserXmlFiles.xml";
            if (!File.Exists(XmlFile))
            {
                CreateXmlFile(XmlFile);
            }
            XDocument xdocument = XDocument.Load(XmlFile);    //asp.net  XDocument.Load(Server.MapPath("//XmlFile//UserXmlFile.xml"));

            Console.WriteLine("--------------開始遍歷XML節點內容--------------");
            var Users = from userInfo in xdocument.Element("Root").Elements() select new { UserID = userInfo.Element("UserID").Value, UserName = userInfo.Element("UserName").Value };
            foreach (var item in Users)
            {
                Console.WriteLine(string.Format("用戶ID爲:{0};名字爲:{1}", item.UserID, item.UserName));
            }

運行結果:
.net

3:[建立XML]上面提到假如XML文件不存在則建立一個,並增長咱們想要的節點內容code

        /// <summary>
        /// 生成XML文件
        /// </summary>
        /// <param name="XmlFile">XML保存的路徑</param>
        private static void CreateXmlFile(string XmlFile)
        {
            XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
            xdoc.Save(XmlFile);
        }

        private static XElement CreateXElement()
        {
            XElement root = new XElement("Root",new XElement("User",new XElement("UserID","1"),new XElement("UserName","踏浪帥")),
                new XElement("User", new XElement("UserID", "2"), new XElement("UserName", "wujunyang")),
                new XElement("User", new XElement("UserID", "3"), new XElement("UserName", "cnblogs")));
            return root;
        }

4:[帶條件遍歷]帶條件進行查詢出想要的結果,這邊咱們查找UserID的值大於1orm

            Console.WriteLine("--------------開始帶條件遍歷XML節點內容--------------");
            var UserForWhere = from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) > 1 select new { UserID = userInfo.Element("UserID").Value, UserName = userInfo.Element("UserName").Value };
            foreach (var item in UserForWhere)
            {
                Console.WriteLine(string.Format("用戶ID爲:{0};名字爲:{1}", item.UserID, item.UserName));
            }

運行結果:
xml

5:[插入]往XML插入咱們想要的值,此處咱們再增長一個blog

            Console.WriteLine("--------------往XML文件裏再插入一個節點的內容--------------");
            XElement InsertRoot = new XElement("User", new XElement("UserID", "4"), new XElement("UserName", "廈門"));
            xdocument.Element("Root").Add(InsertRoot);
            xdocument.Save(XmlFile);
            Console.WriteLine("插入節點成功");

運行結果:
utf-8

XML文件內容變成:element

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <User>
    <UserID>1</UserID>
    <UserName>踏浪帥</UserName>
  </User>
  <User>
    <UserID>2</UserID>
    <UserName>wujunyang</UserName>
  </User>
  <User>
    <UserID>3</UserID>
    <UserName>cnblogs</UserName>
  </User>
  <User>
    <UserID>4</UserID>
    <UserName>廈門</UserName>
  </User>
</Root>

6:[更新]對節點下某個值進行更新,經過條件進行查找出來再更新

            Console.WriteLine("--------------更新XML文件裏節點的內容--------------");
            XElement UserUpdate = (from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) == 3 select userInfo).SingleOrDefault();
            if (UserUpdate != null)
            {
                UserUpdate.Element("UserName").Value = "www.cnblogs.com/wujy";
                xdocument.Save(XmlFile);
            }
            Console.WriteLine("更新節點成功");

運行結果:

7:[刪除]針對某個條件對XML中的某一項進行刪除

            Console.WriteLine("--------------刪除XML文件裏節點的內容--------------");
            XElement UserDelete = (from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) == 2 select userInfo).SingleOrDefault();
            if (UserDelete != null)
            {
                UserDelete.Remove();
                xdocument.Save(XmlFile);
            }
            Console.WriteLine("刪除節點成功");

運行結果:

 

8:除的上面提到值還有一種是屬性以下面:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <User UserName="wujy" PassWord="76543" Age="30" />
  <User UserName="cnblogs" PassWord="23456" Age="26" />
  <User UserName="踏浪帥" PassWord="4567" Age="34" />
</Root>

最近碰到一字符串的XML,接着咱們就實現把它轉化爲一個實體:

    public class User 
    {
        public string UserName { get; set; }

        public string PassWord { get; set; }

        public string Age { get; set; }
    }
        private static void CreateXmlFile(string XmlFile)
        {
            XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
            xdoc.Save(XmlFile);
        }

        private static XElement CreateXElement()
        {
            XElement root = new XElement("Root", new XElement("User", new XAttribute("UserName", "wujy"), new XAttribute("PassWord", "76543"), new XAttribute("Age", "30")),
                new XElement("User", new XAttribute("UserName", "cnblogs"), new XAttribute("PassWord", "23456"), new XAttribute("Age", "26")),
                new XElement("User", new XAttribute("UserName", "踏浪帥"), new XAttribute("PassWord", "4567"), new XAttribute("Age", "34")));
            return root;
        }


        public static List<User> DindDB()
        {
            List<User> list = new List<User>();
            XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
            string XmlStr = xdoc.ToString();
            byte[] ARRAY=Encoding.UTF8.GetBytes(cleanStringEmpty(XmlStr));
            MemoryStream stream=new MemoryStream(ARRAY);
            StreamReader READER=new StreamReader(stream);
            XDocument xmdo = XDocument.Load(READER);

            var ResultUsers = from userInfo in xmdo.Elements("Root").Elements("User") select new { UserName = userInfo.Attribute("UserName").Value, PassWord = userInfo.Attribute("PassWord").Value, Age = userInfo.Attribute("Age").Value };
            foreach (var item in ResultUsers)
            {
                User model = new User();
                model.UserName = item.UserName;
                model.PassWord = item.PassWord;
                model.Age = item.Age;
                list.Add(model);
            }
            return list;
        }

        private static string cleanStringEmpty(string str)
        {
            if (!string.IsNullOrEmpty(str))
            {
                StringBuilder sb = new StringBuilder();
                string[] newStr = str.ToString().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < newStr.Length; i++)
                {
                    sb.Append(newStr[i].Trim());
                }
                return sb.ToString();
            }
            else
            {
                return null;
            }
        }

 

 

 若是,您認爲閱讀這篇博客讓您有些收穫,不妨點擊一下右下角的【推薦】按鈕,如有不足歡迎指正。  由於,個人寫做熱情也離不開您的確定支持。
 
感謝您的閱讀(源代碼下載

相關文章
相關標籤/搜索