1.创建xml
1 public static void CreateXmlDoc() 2 { 3 XElement myDoc = 4 new XElement("Customers", 5 new XElement("Customer", new XAttribute("ID", "1"), 6 new XElement("Usename", "Rock Zed"), 7 new XElement("FirstName", "Rock"), 8 new XElement("LastName", "Zed"), 9 new XElement("PhoneNo", "35481254") 10 ) 11 ); 12 myDoc.Save("Customer.xml"); 13 }
创建的xml文档内容如下:
<?xml version="1.0" encoding="utf-8"?> <Customers> <Customer ID="1"> <Usename>Rock Zed</Usename> <FirstName>Rock</FirstName> <LastName>Zed</LastName> <PhoneNo>35481254</PhoneNo> </Customer> </Customers>
2.获取XML文档内容
1 #region Load XML doc 2 public static XDocument GetXmlDoc() 3 { 4 try 5 { 6 XDocument myDoc = XDocument.Load(System.Web.HttpContext.Current.Server.MapPath("~/Customer.xml")); 7 return myDoc; 8 } 9 catch (System.IO.FileNotFoundException ex) 10 { 11 return null; 12 } 13 } 14 #endregion 15 //将xml内容与自定义类相对应 获取到对应类的集合 16 public static List<Customer> GetXmlData() 17 { 18 List<Customer> listCs = new List<Customer>(); 19 XDocument myDoc = XmlHelper.GetXmlDoc(); 20 if (myDoc != null) 21 { 22 var query = from c in myDoc.Descendants("Customer") 23 select new Customer 24 { 25 ID=c.FirstAttribute.Value, 26 UseName = c.Element("Usename").Value, 27 FirstName = c.Element("FirstName").Value, 28 LastName = c.Element("LastName").Value, 29 Phone = c.Element("PhoneNo").Value 30 }; 31 foreach (var item in query) 32 { 33 listCs.Add(item); 34 } 35 } 36 return listCs; 37 }
以上的Customer类的属性和xml文档节点内容相对应 Customer类如下
public class Customer { public string ID { get; set; } public string UseName { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Phone { get; set; } }
3.向XML文档添加内容
#region Insert new item public static void InsertNewElement(Customer cs) { try { // Load current document. XDocument myDoc = XDocument.Load(System.Web.HttpContext.Current.Server.MapPath("~/Customer.xml")); Random r = new Random(); // add new element XElement newElement = new XElement("Customer",new XAttribute("ID", r.Next(5000)), new XElement("Usename", cs.UseName), new XElement("FirstName", cs.FirstName), new XElement("LastName", cs.LastName), new XElement("PhoneNo", cs.Phone)); myDoc.Descendants("Customers").First().Add(newElement); // Save changes. myDoc.Save(System.Web.HttpContext.Current.Server.MapPath("~/Customer.xml")); } catch (Exception ex) { throw ex; } } #endregion
4.修改XML文档内容
1 public static void EditElement(Customer cs) 2 { 3 try 4 { 5 // Load current document. 6 XDocument myDoc = XDocument.Load(System.Web.HttpContext.Current.Server.MapPath("~/Customer.xml")); 7 //by ID load xml 8 IEnumerable<XElement> products = from c in myDoc.Descendants("Customer") where c.FirstAttribute.Value == cs.ID select c; 9 if (products.Count() > 0) 10 { 11 XElement product = products.First(); 12 //replace xml element 13 product.ReplaceNodes( new XElement("Usename", cs.UseName), new XElement("FirstName", cs.FirstName), new XElement("LastName", cs.LastName), new XElement("PhoneNo", cs.Phone)); 14 } 15 myDoc.Save(HttpContext.Current.Server.MapPath("~/Customer.xml")); 16 } 17 catch (Exception ex) 18 { 19 throw ex; 20 } 21 }
5.删除XML文档节点
1 public static void DeleteElement(string id) 2 { 3 try 4 { 5 XDocument myDoc = XDocument.Load(System.Web.HttpContext.Current.Server.MapPath("~/Customer.xml")); 6 IEnumerable<XElement> customer = from c in myDoc.Descendants("Customer") where c.FirstAttribute.Value == id select c; 7 if (customer.Count() > 0) 8 { 9 customer.First().Remove(); 10 } 11 myDoc.Save(HttpContext.Current.Server.MapPath("~/Customer.xml")); 12 } 13 catch (Exception ex) 14 { 15 throw ex; 16 } 17 }
6.通过指定值查询特定XML节点内容
1 #region Query customer 2 public static Customer FindCustomerByID(string id) 3 { 4 try 5 { 6 Customer cs = new Customer(); 7 // Load current document. 8 XDocument myDoc = XDocument.Load(System.Web.HttpContext.Current.Server.MapPath("~/Customer.xml")); 9 var query = from c in myDoc.Root.Elements("Customer") 10 where (string)c.FirstAttribute.Value == id 11 select new Customer 12 { 13 ID = c.FirstAttribute.Value, 14 UseName = c.Element("Usename").Value, 15 FirstName = c.Element("FirstName").Value, 16 LastName = c.Element("LastName").Value, 17 Phone = c.Element("PhoneNo").Value 18 }; 19 20 foreach (var item in query) 21 { 22 cs.ID = item.ID; 23 cs.UseName = item.UseName; 24 cs.FirstName = item.FirstName; 25 cs.LastName = item.LastName; 26 cs.Phone = item.Phone; 27 } 28 return cs; 29 } 30 catch (Exception ex) 31 { 32 return null; 33 } 34 } 35 #endregion
7.结合以上方法做了一个MVC操作XML文档的增删改查的Demo 源码地址如下
https://github.com/ZedH/XmlTest