LINQ to XML 使用筆記 - 修改 XML 資料

2018-02-05 10:31:06来源:http://poychang.github.io/linq-to-xml-edit-xml/作者:Poy Chang人点击

分享

接续上篇的基本操作,这篇主要使用 LINQ to XML 来修改 XML 资料。


目录:


基本操作
建立 XML 档案
查询 XML 资料
修改 XML 资料
转换 XML 资料
验证 XML 资料
取得 CDATA 资料


系列文完整範例程式码请参考poychang/Demo-Linq-To-Xml


LINQ to XML 已经帮我们内建了新增、 修改、删除所需要的方法,我们只要简单的调用他们,就可以轻鬆完成修改 XML 资料的的目的。


新增 XML 资料


使用Add()
可以在既有的 XML 资料中新增一笔元素资料,这笔资料会被加在 XML 资料中的最后面,另外也可使用AddFirst()
将资料加在最前面,请见以下範例:


xmlDocument.Element("Students")?.Add(
new XElement("Student", new XAttribute("Id", 105),
new XElement("Name", "Todd"),
new XElement("Gender", "Male"),
new XElement("TotalMarks", 980)
));
// OUTPUT:
// ------------------------------
// <Students>
// <Student Id="105">
// <Name>Todd</Name>
// <Gender>Male</Gender>
// <TotalMarks>980</TotalMarks>
// </Student>
// </Students>


如果想要将资料加在指定元素的前面或后面,可以使用AddBeforeSelf()
或AddAfterSelf()
将要新增的资料加在指定的序列位置,请见以下範例:


xmlDocument.Element("Students")?.Elements("Student")
.First(x => x.Attribute("Id")?.Value == "103")
.AddBeforeSelf(
new XElement("Student", new XAttribute("Id", 106),
new XElement("Name", "Todd"),
new XElement("Gender", "Male"),
new XElement("TotalMarks", 980)));
// OUTPUT:
// ------------------------------
// <Students>
// <Student Id="106">
// <Name>Todd</Name>
// <Gender>Male</Gender>
// <TotalMarks>980</TotalMarks>
// </Student>
// <Student Id="103">
// <Name>Pam</Name>
// <Gender>Female</Gender>
// <TotalMarks>850</TotalMarks>
// </Student>
// </Students>
修改 XML 资料


更新 XML 既有元素可先透过 LINQ 找到目标元素后,使用SetElementValue()
或是SetValue()
方法,修改该元素的值,请见以下範例:


xmlDocument.Element("Students")?.Elements("Student")
.FirstOrDefault(x => x.Attribute("Id")?.Value == "106")?.SetElementValue("TotalMarks", 999);
xmlDocument.Element("Students")?.Elements("Student")
.Where(x => x.Attribute("Id")?.Value == "106")
.Select(x => x.Element("TotalMarks")).FirstOrDefault()?.SetValue(999);


上面两段程式码会是等价的,但查询方式不同,所以调用不同的修改方法,第一种方式会先找到Student
这个元素后,修改底下的指定的属性值,第二种则是找到Student
这个元素后,针对 TotalMarks 这个属性去修改设定值。


删除 XML 资料

删除的动作相当简单,请见以下範例:


// 删除筛选到的 XML 元素
xmlDocument.Root?.Elements().Where(x => x.Attribute("Id")?.Value == "106").Remove();
// 删除根元素底下的所有 XML 元素,以範例来说,为删除根元素下 Students 元素
xmlDocument.Root?.Elements().Remove();


这里的xmlDocument.Root
等价于xmlDocument.Element("Students")
,也就是整份 XML 文件的根结点。若是要表示 XML 文件的起始,建议使用xmlDocument.Root
来操作会比较符合语意且直觉。



请参考04-ModifyXmlDocument
专案的Program.cs


参考资料:


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台