對XML文件的操作在平時項目中經常要運用到,比如用於存放一些配置相關的內容;本文將簡單運用Linq TO Xml對XML進行操作,主要講解對XML的創建、加載、增加、查詢、修改以及刪除;重點在於類XDocument、類XElement;本實例是在控制台程序運行,所以對加載的XML文件路徑要注意,若XML文件不是代碼自運創建時要設置其“復制到輸出目錄”-始終復制
1:首先看一下實例要加載的XML文件格式:
<?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):
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)); }
運行結果:
3:[創建XML]上面提到假如XML文件不存在則創建一個,並增加我們想要的節點內容
/// <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的值大於1
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)); }
運行結果:
5:[插入]往XML插入我們想要的值,此處我們再增加一個
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("插入節點成功");
運行結果:
XML文件內容變成:
<?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; } }
如果,您認為閱讀這篇博客讓您有些收獲,不妨點擊一下右下角的【推薦】按鈕,若有不足歡迎指正。 因為,我的寫作熱情也離不開您的肯定支持。
感謝您的閱讀(源代碼下載)