------------LINQ操作XML--------------

EnForGrass 2012-04-21 08:57:44
加精
RT,LINQ操作XML,目的和上篇一样。不解释!!

/// <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");
}



/// <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");



/// <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");



/// <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");



/// <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:整个操作仍然很简单。一页不够!
...全文
5350 71 打赏 收藏 转发到动态 举报
写回复
用AI写文章
71 条回复
切换为时间正序
请发表友善的回复…
发表回复
白云任去留 2013-07-01
  • 打赏
  • 举报
回复
wsnby517 2013-06-08
  • 打赏
  • 举报
回复
楼主能问个问题不? 1.new XDeclaration("1.0","gb2312","yes")中的第三个参数有什么用? 2.添加元素的AddXmlElement()方法中。并没有指明新的节点保存在哪个节点中? xe.Add(book1);这句是将book1保存到哪个节点的里面?难道默认是根节点的下面? 谢谢。我等你的回答哦~
wsnby517 2013-06-08
  • 打赏
  • 举报
回复
我完全被标题吸引了。正在学习这个。特地来看看,应该有帮助的呢·
喂大的程序员 2013-05-08
  • 打赏
  • 举报
回复
担心消化不良
xiongchumoa 2012-08-29
  • 打赏
  • 举报
回复
收藏了,以后不需要自己写了
7271747 2012-05-02
  • 打赏
  • 举报
回复
兄弟 LINQ TO OBJECT
不是那么用的,你这等于是为LINQ而LINQ。
更重要的是不是用了LMAD表达式就是LINQ。建议你实际的用LINQ做个项目。
rczjp 2012-05-02
  • 打赏
  • 举报
回复
多谢楼主分享!!
chensheng021 2012-05-02
  • 打赏
  • 举报
回复
学习了,留着以后慢慢消化。

每天回帖即可获得10分可用分!假如楼主再给几分就更好了
wquanchao 2012-04-30
  • 打赏
  • 举报
回复
学习了,不错,马上就学到XML了
skyblackspring 2012-04-28
  • 打赏
  • 举报
回复
不错不错
TheProgramer 2012-04-27
  • 打赏
  • 举报
回复
没有什么可用价值
xjdbz88 2012-04-26
  • 打赏
  • 举报
回复
谢谢LZ分享 .....
因茹而生 2012-04-26
  • 打赏
  • 举报
回复
有必要写的这么复杂吗?我们搞软件的就要学会“偷懒”,一个linq操作XML就写得这么复杂,让Java工程师情何以堪啊。
Aries_0219 2012-04-26
  • 打赏
  • 举报
回复
= =谢谢LZ分享。。。
  • 打赏
  • 举报
回复
感谢分享!
leemuleezi 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

支持分享
[/Quote]呵呵
TNight 2012-04-26
  • 打赏
  • 举报
回复
个人觉得蛮方便的啊,我现在一般对于xml的操作都是用的linq。。唯一不舒服的是上司总不让用。认为以后维护起来比较麻烦
upc_xiaowei 2012-04-26
  • 打赏
  • 举报
回复
linq怎么发音?我这种初级的大概用不到
EnForGrass 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 的回复:]

有必要写的这么复杂吗?我们搞软件的就要学会“偷懒”,一个linq操作XML就写得这么复杂,让Java工程师情何以堪啊。
[/Quote]
偶这里主要目的是演示LINQ操作XML,
phommy 2012-04-26
  • 打赏
  • 举报
回复
提到的linq操作一点也不方便!提到的方便的操作都与linq无关!
加载更多回复(35)
清晰完整PDF版本,是我从网上买来的 共 80MB,分为7个分卷 在 CSDN 上只有我整个是清晰完整的 LINQ 高级编程 .NET 2010 SQL LINQ高级编程 6/7 原价:48.00元 作者:克莱因 译者:李宝 出版社: 清华大学出版社 出版日期: 2009年 ISBN:9787302198857 -------------------------------------------------------------------------------- 本书由数据库专家scott Klein编写,讲述了如何有效地使用LINQ来查询XML、SQL数据库、ADO.NET DataSet和其他数据源,并对此技术进行了更深入的探讨,展示LINQ够显著地改进应用程序的性能。 本书首先介绍TLINQ和Visual Studio 2008、LINQ相关的语言特性以及LINQ查询和LINQ标准查询操作符;然后展示了如何在c#和Visual Basic中使用LINQ to XML编程,以及如何使用LINQ to XML处理其他数据模型;接下来依次介绍LINQ to SQL查询、高级查询概念、LINQ to Entities和LINQ to DataSets。所有这些颇具价值的见解为您提供了强有力的新工具,从而使您能够轻松地扩展和访问数据库中的信息。 内容提要 --------------------------------------------------------------------------------   本书结合具体实例详述了LINQ高级编程所涉及的各个方面。共分为 LINQ概述、LINQ to XMLLINQ to SQL及附录四大部分,每一部分的各个章节结构清晰,层次明显。本书并不是对一种新技术的简单介绍,而是力求使读者通过本书的学习能够立即将LINQ应用到自己的项目开发中。 本书的内容深入浅出,循序渐进,不仅适合LINQ初学者,也可以作为数据库开发人员进阶的参考书。 目录 -------------------------------------------------------------------------------- 第Ⅰ部分 LINQ项目简介  第1章 LINQ项目   1.1 LINQ概述   1.2 标准查询操作符   1.3 LINQ to XML概述   1.4 LINQto SQL概述   1.5 本章小结  第2章 Visual Studio 2008简介   2.1 Visual Studi0 2008   2.2 语言相关的LINQ特性   2.3 本章小结  第3章 LINQ查询   3.1 LrNQ查询简介   3.2 查询语法和方法语法的区别   3.3 使用查询语法和方法语法   3.4 本章小结  第4章 LINQ标准查询操作符   4.1 概述   4.2 标准查询操作符   4.3 使用查询操作符   4.4 本章小结 第Ⅱ部分 LINQ to XML  第5章 理解LINQ to XML   5.1 L]NQ t0XML概述   5.2 LrNQ to XML编程基础   5.3 LINQ to XML编程概念   5.4 LINQtoXML与其他XML技术的比较   5.5 本章小结  第6章 LINQ to XML编程  第7章 LINQ to XML和其他LINQ  第8章 LINQ to XML编程高级  第9章 LINQ to XML和Visual Basic.NET 第Ⅲ部分 LINQ to SQL  第10章 LINQ to SQL概述  第11章 LINQ to SQL查询  第12章 高级查询概念  第13章 实体类  第14章 LINQ to DataSet  第15章 LINQ to SQL高级论题 第Ⅳ部分 附录 作者介绍 -------------------------------------------------------------------------------- SCott K Jein,数据库专家、资深顾问,他对SQL Server、.NET和XML都有着浓厚的兴趣。除本书外,他的著作还包括Professional SQL Server 2005 XML和Professiona/WCF Programming(本书已由清华大华出版社引进并出版,中文版书名为《WCF高级编程》)。除了出版图书之外,Scott Klein还为SOL PASS Community Connector撰写半月刊专题文章,并经常在Wrox网站(www.Wrox.corn)和TopXML网站(www.TopXML.com)上发表文章,在SQL Server和.NET用户群里发言。您可以通过ScottKlein@SalXml.com与他交流。 文摘 -------------------------------------------------------------------------------- 第Ⅰ部分 LINQ项目简介 第1章 LINQ项目 我经常听说这样的问题,“什么是LINQ?”,“它是用来做什么的?”,“我们为什么需要它?”。第一个问题(以及随后的其他两个问题)的答案是,语言集成查询(LanguageIntegrated Query,LINQ)是一系列标准查询操作符的集合,这些操作符几乎对每一种数据源的导航、过滤和执行操作都提供了底层的基本查询架构。LINQ可查询的数据源包括XML(可使用LINQ to XML,即原来的XLINQ)、关系数据(使用LINQ to SQL,即先前的DLINQ)、AD0.NET DataSets(使用LINQ to DataSet),以及内存中的数据。 理解这项奇妙的新技术的最好方法就是了解一些关于LINQ如何出现以及为什么出现的历史和背景。 虽然人们最早听说LINQ是在2005年秋季,但实际上2003年初微软就启动了LINQ的开发。LINQ的总体目标是使开发人员更容易地处理SQL和XML数据,这主要是因为在关系数据(数据库)及与其通信(即对关系数据进行处理)的编程语言之间没有任何联系,对于XML同样也是如此。 大多数开发人员现在都能理解面向对象(object.oriented,OO)编程及其相关技术和特性,如类、方法、对象等。面向对象编程在过去十多年就已有巨大的发展,但即使在当前,如果要操纵的信息不是使用00方式定义的或本身就不具有00特性,通过O0技术使用和整合这些信息时仍然存在难以逾越的鸿沟。
清晰完整PDF版本,是我从网上买来的 共 80MB,分为7个分卷 在 CSDN 上只有我整个是清晰完整的 LINQ 高级编程 .NET 2010 SQL LINQ高级编程 2/7 原价:48.00元 作者:克莱因 译者:李宝 出版社: 清华大学出版社 出版日期: 2009年 ISBN:9787302198857 -------------------------------------------------------------------------------- 本书由数据库专家scott Klein编写,讲述了如何有效地使用LINQ来查询XML、SQL数据库、ADO.NET DataSet和其他数据源,并对此技术进行了更深入的探讨,展示LINQ够显著地改进应用程序的性能。 本书首先介绍TLINQ和Visual Studio 2008、LINQ相关的语言特性以及LINQ查询和LINQ标准查询操作符;然后展示了如何在c#和Visual Basic中使用LINQ to XML编程,以及如何使用LINQ to XML处理其他数据模型;接下来依次介绍LINQ to SQL查询、高级查询概念、LINQ to Entities和LINQ to DataSets。所有这些颇具价值的见解为您提供了强有力的新工具,从而使您能够轻松地扩展和访问数据库中的信息。 内容提要 --------------------------------------------------------------------------------   本书结合具体实例详述了LINQ高级编程所涉及的各个方面。共分为 LINQ概述、LINQ to XMLLINQ to SQL及附录四大部分,每一部分的各个章节结构清晰,层次明显。本书并不是对一种新技术的简单介绍,而是力求使读者通过本书的学习能够立即将LINQ应用到自己的项目开发中。 本书的内容深入浅出,循序渐进,不仅适合LINQ初学者,也可以作为数据库开发人员进阶的参考书。 目录 -------------------------------------------------------------------------------- 第Ⅰ部分 LINQ项目简介  第1章 LINQ项目   1.1 LINQ概述   1.2 标准查询操作符   1.3 LINQ to XML概述   1.4 LINQto SQL概述   1.5 本章小结  第2章 Visual Studio 2008简介   2.1 Visual Studi0 2008   2.2 语言相关的LINQ特性   2.3 本章小结  第3章 LINQ查询   3.1 LrNQ查询简介   3.2 查询语法和方法语法的区别   3.3 使用查询语法和方法语法   3.4 本章小结  第4章 LINQ标准查询操作符   4.1 概述   4.2 标准查询操作符   4.3 使用查询操作符   4.4 本章小结 第Ⅱ部分 LINQ to XML  第5章 理解LINQ to XML   5.1 L]NQ t0XML概述   5.2 LrNQ to XML编程基础   5.3 LINQ to XML编程概念   5.4 LINQtoXML与其他XML技术的比较   5.5 本章小结  第6章 LINQ to XML编程  第7章 LINQ to XML和其他LINQ  第8章 LINQ to XML编程高级  第9章 LINQ to XML和Visual Basic.NET 第Ⅲ部分 LINQ to SQL  第10章 LINQ to SQL概述  第11章 LINQ to SQL查询  第12章 高级查询概念  第13章 实体类  第14章 LINQ to DataSet  第15章 LINQ to SQL高级论题 第Ⅳ部分 附录 作者介绍 -------------------------------------------------------------------------------- SCott K Jein,数据库专家、资深顾问,他对SQL Server、.NET和XML都有着浓厚的兴趣。除本书外,他的著作还包括Professional SQL Server 2005 XML和Professiona/WCF Programming(本书已由清华大华出版社引进并出版,中文版书名为《WCF高级编程》)。除了出版图书之外,Scott Klein还为SOL PASS Community Connector撰写半月刊专题文章,并经常在Wrox网站(www.Wrox.corn)和TopXML网站(www.TopXML.com)上发表文章,在SQL Server和.NET用户群里发言。您可以通过ScottKlein@SalXml.com与他交流。 文摘 -------------------------------------------------------------------------------- 第Ⅰ部分 LINQ项目简介 第1章 LINQ项目 我经常听说这样的问题,“什么是LINQ?”,“它是用来做什么的?”,“我们为什么需要它?”。第一个问题(以及随后的其他两个问题)的答案是,语言集成查询(LanguageIntegrated Query,LINQ)是一系列标准查询操作符的集合,这些操作符几乎对每一种数据源的导航、过滤和执行操作都提供了底层的基本查询架构。LINQ可查询的数据源包括XML(可使用LINQ to XML,即原来的XLINQ)、关系数据(使用LINQ to SQL,即先前的DLINQ)、AD0.NET DataSets(使用LINQ to DataSet),以及内存中的数据。 理解这项奇妙的新技术的最好方法就是了解一些关于LINQ如何出现以及为什么出现的历史和背景。 虽然人们最早听说LINQ是在2005年秋季,但实际上2003年初微软就启动了LINQ的开发。LINQ的总体目标是使开发人员更容易地处理SQL和XML数据,这主要是因为在关系数据(数据库)及与其通信(即对关系数据进行处理)的编程语言之间没有任何联系,对于XML同样也是如此。 大多数开发人员现在都能理解面向对象(object.oriented,OO)编程及其相关技术和特性,如类、方法、对象等。面向对象编程在过去十多年就已有巨大的发展,但即使在当前,如果要操纵的信息不是使用00方式定义的或本身就不具有00特性,通过O0技术使用和整合这些信息时仍然存在难以逾越的鸿沟。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧