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

EnForGrass novasoftware 软件工程师  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:整个操作仍然很简单。一页不够!
...全文
5189 71 点赞 打赏 收藏 举报
写回复
71 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
白云任去留 2013-07-01
  • 打赏
  • 举报
回复
_耶稣 2013-06-08
楼主能问个问题不? 1.new XDeclaration("1.0","gb2312","yes")中的第三个参数有什么用? 2.添加元素的AddXmlElement()方法中。并没有指明新的节点保存在哪个节点中? xe.Add(book1);这句是将book1保存到哪个节点的里面?难道默认是根节点的下面? 谢谢。我等你的回答哦~
  • 打赏
  • 举报
回复
_耶稣 2013-06-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无关!
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
LINQ
加入

8497

社区成员

.NET技术 LINQ
申请成为版主
帖子事件
创建了帖子
2012-04-21 08:57
社区公告
暂无公告