C#操作xml文件之Linq To Xml详解
简介
Linq to Xml 是一种使用 Linq 技术访问和操作 Xml 文档的方式,相比于其他方式,它更加灵活、简洁,特别是在写查询语句时,可以使代码更加可读、易于理解。
操作步骤
1. 引入命名空间和 xml 文件
在开始使用 Linq to Xml 之前,需要引入命名空间 System.Xml.Linq,同时需要构造一个 XDocument 实例,并将 xml 文件加载到其中。
using System.Xml.Linq;
XDocument doc = XDocument.Load("example.xml");
2. 查询 xml 中的数据
Linq to Xml 将 xml 文档看作一个树形结构,可以使用 Linq 语句查询树中的节点。
例如,可以查询 xml 中所有的 book 节点,并将其转换为 C# 中的对象:
var books = from book in doc.Descendants("book")
select new
{
Title = book.Element("title").Value,
Author = book.Element("author").Value,
Price = book.Element("price").Value
};
在这个例子中,使用了 Descendants 方法查询 XML 中所有的 book 节点,并将其转换为匿名类型的对象,其中包含了每个书的标题、作者和价格。
3. 修改 xml 中的数据
Linq to Xml 不仅可以查询 xml 中的数据,还可以修改节点和属性的值。
例如,可以将 xml 中第一个 book 的 price 修改为 30.00:
var book = doc.Descendants("book").First();
book.Element("price").Value = "30.00";
在这个例子中,使用了 Descendants 方法查询到第一个 book 节点,并将其中的 price 子节点的值修改为 "30.00"。
4. 在 xml 中添加新数据
Linq to Xml 可以添加新的节点、元素和属性到 xml 中。
例如,可以向 xml 中添加一个新的 book 节点:
XElement newBook = new XElement(
"book",
new XElement("title", "Professional C# 7 and .NET Core 2.0"),
new XElement("author", "Christian Nagel"),
new XElement("price", "49.99"),
new XAttribute("category", "programming")
);
doc.Root.Add(newBook);
在这个例子中,可以构造一个新的 XElement 实例,表示一个 book 节点,并用 Add 方法将其加入到根节点中。
示例
示例一
考虑以下 xml 文档:
<?xml version="1.0" encoding="utf-8" ?>
<library>
<book>
<title>Learn C# in 30 days</title>
<author>Tom</author>
<price>15.00</price>
</book>
<book>
<title>Learn Python in 30 days</title>
<author>Kate</author>
<price>20.00</price>
</book>
</library>
在这个 xml 文档中,我们有一个叫做 library 的根节点,下面有两个 book 节点,每个 book 节点包含了书名、作者和价格三个子节点。
现在,我们想查询 xml 中所有的 book 节点,并将其转换为一个 C# 中的对象列表:
var books = from book in doc.Descendants("book")
select new
{
Title = book.Element("title").Value,
Author = book.Element("author").Value,
Price = book.Element("price").Value
};
这个查询语句会返回一个匿名类型的对象列表,其中包含每个书的标题、作者和价格。
示例二
现在,我们想向 xml 中添加一个新的 book 节点。
XElement newBook = new XElement(
"book",
new XElement("title", "Professional C# 7 and .NET Core 2.0"),
new XElement("author", "Christian Nagel"),
new XElement("price", "49.99"),
new XAttribute("category", "programming")
);
doc.Root.Add(newBook);
在这个代码段中,我们直接构造了一个新的 XElement 实例,表示一个 book 节点。这个节点包含了新书的三个属性,即标题、作者和价格,同时还有一个 category 属性表示书的类型。
最后,我们使用 Add 方法将新节点添加到 xml 文档的根节点中,并且这些修改会直接反映到 xml 文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#操作xml文件之Linq To Xml详解 - Python技术站