System.Xml.Linq 命名空间包含 LINQ to XML 的19个类。 LINQ to XML 是内存中的 XML 编程接口,使能轻松有效地修改 XML 文档。
微软在 LINQ 上投入了很大的精力,使我们在编程时感觉到很舒服。处理 XML 时使用最多的三个类:XElement、XAttribute 和 XDocument。
序号 | 类 | 说明 |
1 | Extensions | 包含 LINQ to XML 扩展方法。 |
2 | XAttribute | 表示 XML 特性。 |
3 | XCData | 表示包含 CDATA 的文本节点。 |
4 | XComment | 表示 XML 注释。 |
5 | XContainer | 表示可包含其他节点的节点。 |
6 | XDeclaration | 表示 XML 声明。 |
7 | XDocument | 表示 XML 文档。 有关 XDocument 对象的组件和用法,请参阅 XDocument Class Overview。 |
8 | XDocumentType | 表示 XML 文档类型定义 (DTD)。 |
9 | XElement | 表示一个 XML 元素。 有关用法信息和示例,请参阅本页的 XElement 类概述和“备注”部分。 |
10 | XName | 表示 XML 元素或属性的名称。 |
11 | XNamespace | 表示一个 XML 命名空间。 此类不能被继承。 |
12 | XNode | 表示 XML 树中节点的抽象概念(元素、注释、文档类型、处理指令或文本节点)。 |
13 | XNodeDocumentOrderComparer | 包含用于比较节点文档顺序的功能。 此类不能被继承。 |
14 | XNodeEqualityComparer | 比较节点以确定其是否相等。 此类不能被继承。 |
15 | XObject | 表示 XML 树中的节点或属性。 |
16 | XObjectChangeEventArgs | 提供有关 Changing 和 Changed 事件的数据。 |
17 | XProcessingInstruction | 表示 XML 处理指令。 |
18 | XStreamingElement | 表示 XML 树中支持流输出延迟的的元素。 |
19 | XText | 表示文本节点。 |
表格中列元素详解见超链接。
//通过XDocument创建XML
//通过XElement创建XML
using System.Xml.Linq;
namespace _10_1
{
class Program
{
static void Main(string[] args)
{
CreateDocument();
CreateCategories();
#region 通过XDocument创建XML
void CreateDocument()
{
string path = Directory.GetCurrentDirectory() + @"\xmldoc.xml";
XDocument _xmldoc = new(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("Root", "root")
);
_xmldoc.Save(path);
}
#endregion 通过XDocument创建XML
#region 通过XElement创建XML
void CreateCategories()
{
string path = Directory.GetCurrentDirectory() + @"\People.xml";
XElement root = new("Peoples",
new XElement("People",
new XElement("ID", Guid.NewGuid()),
new XElement("Name", "王菲")
),
new XElement("People",
new XElement("ID", Guid.NewGuid()),
new XElement("Name", "谢霆锋")
),
new XElement("People",
new XElement("ID", Guid.NewGuid()),
new XElement("Name", "章子怡")
),
new XElement("People",
new XElement("ID", Guid.NewGuid()),
new XElement("Name", "汪峰")
)
);
root.Save(path);
}
#endregion 通过XElement创建XML
}
}
}
9586dab0-28a4-465a-987d-5f1e89042154
王菲
7bf22551-7635-4768-bb12-d826ba0991d3
谢霆锋
bcf1f65d-38f5-40f1-8ad7-eae9d7ee117e
章子怡
dc69f99b-b8cf-46c3-bba6-a23909a199cd
汪峰
root
LINQ to XML的强大之处还在于它可以使用LINQ to SQL或者LINQ to Object获取数据源,然后填充到xml树。
从 Northwind 数据库中读取 Categories、Products 表中的数据来创建包含产品类别,以及每
XElement 类包含了许多方法,这些方法使得处理 xml 变得轻而易举。其中,Save、CreateReader、ToString 和 WriteTo 方法是比较常用的三个方法:
方法 | 参数 | 返回值 | 描述 |
CreateReader | 无 | System.Xml.XmlReader | 创建此节点的XmlReader |
Saye | System.String | void | 将此元素序列化为文件 |
System.I0.TextWriter | void | 将此元素序列化为TextWriter | |
System.Xml.XmlWriter | void | 将此元素序列化为XmlWriter | |
System.String, System.Xml.Linq.SaveOptions |
void | 将此元素序列化为文件,并可以选择 禁用格式设置 |
|
System.IO.TextWriter System.Xml.Linq.SaveOptions |
void | 将此元素序列化为TextWriter,并可 以选择禁用格式设置 |
|
WriteTo | System.Xml.XmlWriter | void | 将此元素写入XmlWriter |
ToString | 无 | System.String | 返回此节点的缩进XML |
System.Xml.Ling.SaveOptions | System.String | 返回此节点的XML,并可以选择禁用 格式设置 |
XAttribute 类用来处理元素的属性,属性是与元素相关联的“名称-值”对,每个元素中不能有名称重复的属性。使用 XAttribute 类与使用 XElement 类的操作十分相似。
//创建 xml 树时添加属性
using System.Xml.Linq;
namespace _10_1
{
class Program
{
static void Main(string[] args)
{
CreateCategoriesByXAttribute();
#region 创建 xml 树时添加属性
XElement CreateCategoriesByXAttribute()
{
string path = Directory.GetCurrentDirectory() + @"\PeoplebyXAttribute.xml";
XElement root = new("Peoples",
new XElement("People",
new XAttribute("ID", Guid.NewGuid()),
new XElement("Name", "李小龙")
),
new XElement("People",
new XAttribute("ID", Guid.NewGuid()),
new XElement("Name", "李连杰")
),
new XElement("People",
new XAttribute("ID", Guid.NewGuid()),
new XElement("Name", "成龙")
),
new XElement("People",
new XAttribute("ID", Guid.NewGuid()),
new XElement("Name", "甄子丹")
)
);
root.Save(path);
return root;
}
#endregion 创建 xml 树时添加属性
}
}
}
李小龙
李连杰
成龙
甄子丹
对象 | 个数 | 说明 |
XDeclaration | 一个 | 用于指定 xml 声明中的重要组成部分,如文档编码和版本等 |
XElement | 一个 | 指定文档的根元素 |
XDocumentType | 一个 | 表示一个 xml DTD |
XComment | 多个 | Xml 注释。它不能是第一个参数,因为一个有效的 xml 文档不能以注释作为开始 |
XProcessingInstruction | 多个 | 为处理 xml 的应用程序指定任何所需信息 |