读书人

-LINQ操作XML-解决方法

发布时间: 2012-05-23 13:44:13 作者: rapoo

------------LINQ操作XML--------------
RT,LINQ操作XML,目的和上篇一样。不解释!!

C# code
        /// <summary>        /// 1、创建BookStore.xml的XML文件,由函数CreateXmlFile()完成        /// </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);        }      //调用函数CreateXmlFile(string xmlpath)      static void Main(string[] args)        {            ///创建一个名为BookStore.xml的xml文件            Program.CreateXmlFile(@"C:\BookStore.xml");         }


C# code
        /// <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);        }            //调用函数AddXmlElement(string xmlpath)            ///添加XML元素            Program.AddXmlElement(@"C:\BookStore.xml"); 



C# code
        /// <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);        }            //调用函数ModifyXmlElement(string xmlpath, string strElement)            ///修改XML文件的元素            Program.ModifyXmlElement(@"C:\BookStore.xml", "004");


C# code
        /// <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.RemoveAll();                ///删除此元素的属性                //firstelement.RemoveAttributes();                ///删除此元素的子节点                //firstelement.RemoveNodes();            }            xe.Save(xmlpath);            Console.WriteLine(xe);        }            //调用函数 DeleteXmlElement(string xmlpath, string strElement)            ///删除XML元素            Program.DeleteXmlElement(@"C:\BookStore.xml","new004");


C# code
        /// <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;                //XAttribute attr = firstelement.Attribute("BookID");                ///将属性转换成元素                firstelement.AddFirst(                    new XElement(attr.Name, attr.Value)//添加BookID元素                    );                ///删除属性                firstelement.RemoveAttributes();            }            xe.Save(xmlpath);            Console.WriteLine(xe);        }            //调用函数:ConvertAttributeToElement(string xmlpath, string strAttribute)            ///删除XML元素            //Program.DeleteXmlElement(@"C:\BookStore.xml","new004");//注释这一样            ///将文件中的属性更换成元素            Program.ConvertAttributeToElement(@"C:\BookStore.xml","new004"); 



PS:整个操作仍然很简单。一页不够!

[解决办法]
这算是linq进阶么~?学习学习~直接linq命名空间下就有么?还是linq.xml?
[解决办法]
支持分享
[解决办法]
有几个小问题要注意一下
if (element.Count() > 0)
{
XElement firstelement = element.First();

;......
如果element为null,
那么程序直接挂掉
我觉得FirstOrDefault()比First()要好些
[解决办法]
谢谢分享,继续学习!...
[解决办法]
以后你再发少于300分的帖子,直接删帖
[解决办法]
写得很好,特来支持!!!
[解决办法]
感谢lz分享~~支持~~
[解决办法]
感谢lz分享~~支持~~
[解决办法]
。。看不懂先赚点分在说。
[解决办法]
这才叫真正的代码。写的很规范。漂亮。像你学习
[解决办法]
把带命名空间的读写加上就更好了
[解决办法]
学习也可以得分,这是一种享受,我猜楼主至多给我一分,楼主你敢不敢给我10分。
[解决办法]
探讨

引用:
以后你再发少于300分的帖子,直接删帖

这个。。可以有

[解决办法]
支持分享!
[解决办法]
很好,很实用 。给我分!!!!!!!!我要下zai
[解决办法]
不错不错,楼主最近一直在爆啊。大家可以看看LINQPad。LINQPad一款是集成了IDE和SQL的 LINQ 解析器。它有着简单而实用的用户界面,可即时执行LINQ查询,包括LINQ to SQL、LINQ to Objects和LINQ to XML等多语句查询。
http://www.linqpad.net/
[解决办法]
谢谢分享
[解决办法]
谢谢分享
[解决办法]
谢谢分享
[解决办法]
必须要mark
[解决办法]
收藏学习
[解决办法]
收藏,谢谢啦
[解决办法]
不解释,拉倒
[解决办法]
不错, c++中常用的 cmarkup,查找过程中,要不断的 intoElement intoElement

C/C++ code
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();
[解决办法]
学习了,谢谢。
[解决办法]
督察,根据你的提醒,代码写得更优雅了
[解决办法]
督察,根据你的提醒,代码写得更优雅了


[解决办法]
谢谢 非常感激
[解决办法]
谢谢LZ分享 .....
[解决办法]
= =谢谢LZ分享。。。
[解决办法]
有必要写的这么复杂吗?我们搞软件的就要学会“偷懒”,一个linq操作XML就写得这么复杂,让Java工程师情何以堪啊。
[解决办法]
提到的linq操作一点也不方便!提到的方便的操作都与linq无关!
[解决办法]
linq怎么发音?我这种初级的大概用不到
[解决办法]
个人觉得蛮方便的啊,我现在一般对于xml的操作都是用的linq。。唯一不舒服的是上司总不让用。认为以后维护起来比较麻烦
[解决办法]

探讨

支持分享

[解决办法]
感谢分享!
[解决办法]
没有什么可用价值
[解决办法]
不错不错
[解决办法]
学习了,不错,马上就学到XML了
[解决办法]
lingq我还没搞明白呢!!
[解决办法]
学习了,留着以后慢慢消化。

每天回帖即可获得10分可用分!假如楼主再给几分就更好了
[解决办法]
多谢楼主分享!!
[解决办法]
兄弟 LINQ TO OBJECT
不是那么用的,你这等于是为LINQ而LINQ。
更重要的是不是用了LMAD表达式就是LINQ。建议你实际的用LINQ做个项目。

读书人网 >.NET

热点推荐