使用linq来操作xml对象,这里简单的举了一些例子
/// <summary> ///1、新建 XML文件 /// </summary> /// <param name="xmlpath"> XML文件的路径</param> private static void CreateXmlFile(string xmlpath) { XDocument doc = new XDocument( ///创建XDocument类的实例 new XDeclaration("1.0", "utf-8", "yes"),///XML的声明,包括版本,编码,xml文件是否独立 new XElement("Books", ///添加根节点 new XElement("Book", ///添加一个节点 new XAttribute("BookID", "001"),///添加属性BookID new XElement("BookNo", "0001"), ///添加元素BookNo new XElement("BookName", "Book 0001"),///添加元素BookName new XElement("BookPrice", "40"),///添加元素BookPrice new XElement("BookRemark", "This is a book 0001")///添加元素BookRemark ) ) ); ///保存XML文件到指定地址 doc.Save(xmlpath); Console.WriteLine(doc); }
/// <summary> /// 2、添加元素 /// </summary> /// <param name="xmlpath">XML文件的路径</param> private static void AddXmlElement(string xmlpath) { ///导入XML文件 XElement xe = XElement.Load(xmlpath); ///创建一个新节点 XElement book1 = new XElement("Book", new XAttribute("BookID", "002"), new XElement("BookNo", "0002"), new XElement("BookName", "Book 0002"), new XElement("BookPrice", "50"), new XElement("BookRemark", "This is a book 0002") ); ///添加节点到XML文件中,并保存 xe.Add(book1); ///创建一个新节点 XElement book2 = new XElement("Book", new XAttribute("BookID", "003"), new XElement("BookNo", "0003"), new XElement("BookName", "Book 0003"), new XElement("BookPrice", "30"), new XElement("BookRemark", "This is a book 0003") ); ///添加节点到XML文件中,并保存 xe.Add(book2); ///创建一个新节点 XElement book3 = new XElement("Book", new XAttribute("BookID", "004"), new XElement("BookNo", "0004"), new XElement("BookName", "Book 0004"), new XElement("BookPrice", "60"), new XElement("BookRemark", "This is a book 0004") ); ///添加节点到XML文件中 xe.Add(book3); ///保存到XML文件中 xe.Save(xmlpath); Console.WriteLine(xe); }
/// <summary> /// 3、修改XML文件的元素 /// </summary> /// <param name="xmlpath">XML文件的路径</param> /// <param name="strElement">指定的修改元素</param> private static void ModifyXmlElement(string xmlpath, string strElement) { XElement xe = XElement.Load(xmlpath); ///查询修改的元素 IEnumerable<XElement> element = from e in xe.Elements("Book") where e.Attribute("BookID").Value == strElement select e; ///修改元素 if (element.Count() > 0) { XElement firstelement = element.First(); ///设置新的属性 firstelement.SetAttributeValue("BookID", "new004"); ///替换成新的节点 firstelement.ReplaceNodes( new XElement("BookNo", "new0004"), new XElement("BookName", "Book new0004"), new XElement("BookPrice", "45"), new XElement("BookRemark", "This is a book new0004") ); } xe.Save(xmlpath); Console.WriteLine(xe); }
/// <summary> /// 4、删除XML文件的元素 /// </summary> /// <param name="xmlpath">XML文件的路径</param> /// <param name="strElement">指定删除元素</param> private static void DeleteXmlElement(string xmlpath, string strElement) { XElement xe = XElement.Load(xmlpath); ///查询修改的元素 IEnumerable<XElement> element = from e in xe.Elements("Book") where e.Attribute("BookID").Value == strElement select e; ///修改元素 if (element.Count() > 0) { XElement firstelement = element.First(); //删除该节点 firstelement.Remove(); ///删除此元素的所有节点和属性 ///firstelement.RemoveAll(); ///删除此元素的属性 //firstelement.RemoveAttributes(); ///删除此元素的子节点 //firstelement.RemoveNodes(); } xe.Save(xmlpath); Console.WriteLine(xe); }
/// <summary> /// 5、将XML文件中的属性更换成元素 /// </summary> /// <param name="xmlpath">XML文件的路径</param> /// <param name="strAttribute">指定要更换的属性</param> private static void ConvertAttributeToElement(string xmlpath, string strAttribute) { XElement xe = XElement.Load(xmlpath); ///查询更换的元素 IEnumerable<XElement> element = from e in xe.Elements("Book") where e.Attribute("BookID").Value == strAttribute select e; ///更换为元素 if (element.Count() > 0) { XElement firstelement = element.First(); //获取第一个属性 XAttribute attr = firstelement.FirstAttribute; ///将属性转换成元素 firstelement.AddFirst( new XElement(attr.Name, attr.Value)//添加BookID元素 ); ///删除属性 firstelement.RemoveAttributes(); } xe.Save(xmlpath); Console.WriteLine(xe); }
/// <summary> /// 6、查询根元素 /// </summary> /// <param name="xmlpath">XML文件的路径</param> private static void QueryRootElement(string xmlpath) { XDocument doc = XDocument.Load(xmlpath); Console.WriteLine(doc.Root.Name); }
/// <summary> /// 7、查询指定名称的元素 /// </summary> /// <param name="xmlpath">XML文件的路径</param> /// <param name="strName">查询元素名称</param> private static void QueryElementByName(string xmlpath, string strName) { XElement xe = XElement.Load(xmlpath); ///查询元素 var elements = xe.Elements("Book") .Where(e => (string)e.Element("BookName") == strName) .OrderBy(e => e.Element("BookName")) .ToList(); elements.ForEach(e => Console.WriteLine(e)); }
/// <summary> /// 8、查询指定属性的元素 /// </summary> /// <param name="xmlpath">XML文件的路径</param> /// <param name="strName">指定的属性</param> private static void QueryElementByAttribute(string xmlpath, string strAttribute) { XElement xe = XElement.Load(xmlpath); ///查询元素 var eAttribute = xe.Elements("Book") .Where(e => (string)e.Attribute("BookID") == strAttribute) .OrderBy(e => e.Element("BookID")) .ToList(); eAttribute.ForEach(e => Console.WriteLine(e)); }
/// <summary> /// 9、查询元素并按指定的子元素排序 /// </summary> /// <param name="xmlpath">XML文件的路径</param> /// <param name="strSubElement">指定元素</param> private static void QuerySubElement(string xmlpath) { XElement xe = XElement.Load(xmlpath); var elements = xe.Elements("Book") .Descendants("BookRemark") .ToList(); foreach (var e in elements) { Console.WriteLine(e.Name.LocalName + "\t" + e.Value); } }
/// <summary> /// 10、查询元素并排序 /// </summary> /// <param name="xmlpath">XML文件的路径</param> private static void QueryElementByOrder(string xmlpath) { XElement xe = XElement.Load(xmlpath); var elements = xe.Elements("Book") .Where(e => Convert.ToInt32(e.Attribute("BookID").Value.Substring(e.Attribute("BookID").Value.Length - 1, 1)) > 1) .OrderByDescending(e => (string)e.Element("BookName")) .ToList(); elements.ForEach(e => Console.WriteLine(e.Element("BookName").Value)); }
/// <summary> /// 11、查询元素并计算Price平均值 /// </summary> /// <param name="xmlpath">XML文件的路径</param> private static void QueryElementByCoeompute(string xmlpath) { XElement xe = XElement.Load(xmlpath); var elements = xe.Elements("Book") .Where(e => Convert.ToInt32(e.Attribute("BookID").Value.Substring(e.Attribute("BookID").Value.Length - 1, 1)) > 1) .OrderByDescending(e => (string)e.Element("BookName")) .ToList(); Console.WriteLine("Average:" + elements.Average(e => Convert.ToInt32(e.Element("BookPrice").Value))); }
static void Main(string[] args) { string xmlpath = @"F:\程序案例\LinqToXmlTest\LinqToXmlTest\BookStore.xml"; ///1、创建一个名为BookStore.xml的xml文件 //CreateXmlFile(xmlpath); ///2、添加XML元素 //AddXmlElement(xmlpath); ///3、修改XML文件的元素 //ModifyXmlElement(xmlpath, "004"); ///4、删除XML元素 //DeleteXmlElement(xmlpath, "new004"); ///5、将文件中的属性更换成元素 //ConvertAttributeToElement(xmlpath, "new004"); ///6、查询根元素 //QueryRootElement(path); /// 7、查询指定名称的元素 // QueryElementByName(xmlpath, "Book 0002"); /// 9、查询元素并按指定的子元素排序 //QuerySubElement(xmlpath); /// 10、查询元素并排序 //QueryElementByOrder(xmlpath); /// 11、查询元素并计算Price平均值 QueryElementByCoeompute(xmlpath); Console.ReadKey(); }