`
zxlyecf2
  • 浏览: 129582 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linq to xml

阅读更多

使用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();
        }

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics