LINQ to XML基本操作
Linq to XML同样是对原C#访问XML文件的方法的封装,简化了用xpath进行xml的查询以及增加,修改,删除xml元素的操作。
LINQ to XML 三个最重要类:XElement、XAttribute 和 XDocument。
首先我们先介绍这三个类的基本属性和方法,然后再实现Linq to XML的 增删改查。
1.XDocument
构造函数
名称 | 说明 |
---|---|
XDocument() | 初始化 XDocument 类的新实例。 |
XDocument(Object[]) | 使用指定的内容初始化 XDocument 类的新实例。 |
XDocument(XDocument) | 从现有的 XDocument 对象初始化 XDocument 类的新实例。 |
XDocument(XDeclaration, Object[]) | 用指定的 XDeclaration 和内容初始化 XDocument 类的新实例。 |
属性
名称 | 说明 |
---|---|
BaseUri | 获取此 XObject 的基 URI。 (继承自 XObject。) |
Declaration | 获取或设置此文档的 XML 声明。 |
Document | 获取此 XObject 的 XDocument。 (继承自 XObject。) |
DocumentType | 获取此文档的文档类型定义 (DTD)。 |
FirstNode | 获取此节点的第一个子节点。 (继承自 XContainer。) |
LastNode | 获取此节点的最后一个子节点。 (继承自 XContainer。) |
NextNode | 获取此节点的下一个同级节点。 (继承自 XNode。) |
NodeType | 获取此节点的节点类型。 (重写 XObject.NodeType。) |
Parent | 获取此 XObject 的父级 XElement。 (继承自 XObject。) |
PreviousNode | 获取此节点的上一个同级节点。 (继承自 XNode。) |
Root | 获取此文档的 XML 树的根元素。 |
方法
名称 | 说明 |
---|---|
Add(Object) | 将指定的内容添加为此 XContainer 的子级。 (继承自 XContainer。) |
Add(Object[]) | 将指定的内容添加为此 XContainer 的子级。 (继承自 XContainer。) |
AddAfterSelf(Object) | 紧跟在此节点之后添加指定的内容。 (继承自 XNode。) |
AddAfterSelf(Object[]) | 紧跟在此节点之后添加指定的内容。 (继承自 XNode。) |
AddAnnotation | 将对象添加到此 XObject 的批注列表。 (继承自 XObject。) |
AddBeforeSelf(Object) | 紧邻此节点之前添加指定的内容。 (继承自 XNode。) |
AddBeforeSelf(Object[]) | 紧邻此节点之前添加指定的内容。 (继承自 XNode。) |
AddFirst(Object) | 将指定的内容作为此文档或元素的第一个子级添加。 (继承自 XContainer。) |
AddFirst(Object[]) | 将指定的内容作为此文档或元素的第一个子级添加。 (继承自 XContainer。) |
Ancestors() | 返回此节点的上级元素的集合。 (继承自 XNode。) |
Ancestors(XName) | 返回此节点的经过筛选的上级元素的集合。 集合中只包括具有匹配 XName 的元素。 (继承自 XNode。) |
Annotation(Type) | 从此 XObject 获取指定类型的第一个批注对象。 (继承自 XObject。) |
Annotation<T>() | 从此 XObject 获取指定类型的第一个批注对象。 (继承自 XObject。) |
Annotations(Type) | 获取此 XObject 的指定类型的批注集合。 (继承自 XObject。) |
Annotations<T>() | 获取此 XObject 的指定类型的批注集合。 (继承自 XObject。) |
CreateReader() | 创建此节点的 XmlReader。 (继承自 XNode。) |
CreateReader(ReaderOptions) | 使用 readerOptions 参数指定的选项创建 XmlReader。 (继承自 XNode。) |
CreateWriter | 创建可用于将节点添加至 XContainer 的 XmlWriter。 (继承自 XContainer。) |
DescendantNodes | 按文档顺序返回此文档或元素的子代节点集合。 (继承自 XContainer。) |
Descendants() | 按文档顺序返回此文档或元素的子代元素集合。 (继承自 XContainer。) |
Descendants(XName) | 按文档顺序返回此文档或元素的经过筛选的子代元素集合。 集合中只包括具有匹配 XName 的元素。 (继承自XContainer。) |
Element | 获取具有指定 XName 的第一个(按文档顺序)子元素。 (继承自 XContainer。) |
Elements() | 按文档顺序返回此元素或文档的子元素集合。 (继承自 XContainer。) |
Elements(XName) | 按文档顺序返回此元素或文档的经过筛选的子元素集合。 集合中只包括具有匹配 XName 的元素。 (继承自XContainer。) |
ElementsAfterSelf() | 按文档顺序返回此节点后的同级元素集合。 (继承自 XNode。) |
ElementsAfterSelf(XName) | 按文档顺序返回此节点后经过筛选的同级元素的集合。 集合中只包括具有匹配 XName 的元素。 (继承自 XNode。) |
ElementsBeforeSelf() | 按文档顺序返回此节点前的同级元素集合。 (继承自 XNode。) |
ElementsBeforeSelf(XName) | 按文档顺序返回此节点前经过筛选的同级元素的集合。 集合中只包括具有匹配 XName 的元素。 (继承自 XNode。) |
Equals(Object) | 确定指定的对象是否等于当前对象。 (继承自 Object。) |
Finalize | 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) |
GetHashCode | 作为默认哈希函数。 (继承自 Object。) |
GetType | 获取当前实例的 Type。 (继承自 Object。) |
IsAfter | 确定当前节点是否按文档顺序显示在指定节点之后。 (继承自 XNode。) |
IsBefore | 确定当前节点是否按文档顺序显示在指定节点之前。 (继承自 XNode。) |
Load(Stream) | 使用指定的流创建一个新的 XDocument 实例。 |
Load(String) | 从文件创建新 XDocument。 |
Load(TextReader) | 从 TextReader 创建新的 XDocument。 |
Load(XmlReader) | 从 XmlReader 创建新 XDocument。 |
Load(Stream, LoadOptions) | 使用指定流创建新的 XDocument 实例,也可以选择保留空白,设置基 URI 和保留行信息。 |
Load(String, LoadOptions) | 从文件创建新 XDocument,还可以选择保留空白和行信息以及设置基 URI。 |
Load(TextReader, LoadOptions) | 从 TextReader 创建新 XDocument,还可以选择保留空白和行信息以及设置基 URI。 |
Load(XmlReader, LoadOptions) | 从 XmlReader 加载 XDocument,还可以选择设置基 URI 和保留行信息。 |
MemberwiseClone | 创建当前 Object 的浅表副本。 (继承自 Object。) |
Nodes | 按文档顺序返回此元素或文档的子节点集合。 (继承自 XContainer。) |
NodesAfterSelf | 按文档顺序返回此节点后的同级节点的集合。 (继承自 XNode。) |
NodesBeforeSelf | 按文档顺序返回此节点前的同级节点的集合。 (继承自 XNode。) |
Parse(String) | 从字符串创建新 XDocument。 |
Parse(String, LoadOptions) | 从字符串创建新 XDocument,还可以选择保留空白和行信息以及设置基 URI。 |
Remove | 从节点父级中删除此节点。 (继承自 XNode。) |
RemoveAnnotations(Type) | 从此 XObject 移除指定类型的批注。 (继承自 XObject。) |
RemoveAnnotations<T>() | 从此 XObject 移除指定类型的批注。 (继承自 XObject。) |
RemoveNodes | 从此文档或元素中移除子节点。 (继承自 XContainer。) |
ReplaceNodes(Object) | 使用指定的内容替换此文档或元素的子节点。 (继承自 XContainer。) |
ReplaceNodes(Object[]) | 使用指定的内容替换此文档或元素的子节点。 (继承自 XContainer。) |
ReplaceWith(Object) | 使用指定的内容替换此节点。 (继承自 XNode。) |
ReplaceWith(Object[]) | 使用指定的内容替换此节点。 (继承自 XNode。) |
Save(Stream) | 将此 XDocument 输出到指定的 Stream。 |
Save(String) | 序列化此 XDocument 到文件,如果该文件存在,则覆盖现有的文件。 |
Save(TextWriter) | 将此 XDocument 序列化为 TextWriter。 |
Save(XmlWriter) | 将此 XDocument 序列化为 XmlWriter。 |
Save(Stream, SaveOptions) | 将此 XDocument 输出到指定的 Stream,(可选)并指定格式设置行为。 |
Save(String, SaveOptions) | 将此 XDocument 序列化为文件,还可以选择禁用格式设置。 |
Save(TextWriter, SaveOptions) | 将此 XDocument 序列化为 TextWriter,还可以选择禁用格式设置。 |
ToString() | 返回此节点的缩进 XML。 (继承自 XNode。) |
ToString(SaveOptions) | 返回此节点的 XML,还可以选择禁用格式设置。 (继承自 XNode。) |
WriteTo | 将此文档写入 XmlWriter。 (重写 XNode.WriteTo(XmlWriter)。) |
2.XElement
构造函数
名称 | 说明 |
---|---|
XElement(XElement) | 从其他 XElement 对象初始化 XElement 类的新实例。 |
XElement(XName) | 用指定的名称初始化 XElement 类的新实例。 |
XElement(XStreamingElement) | 从 XStreamingElement 对象初始化 XElement 类的新实例。 |
XElement(XName, Object) | 用指定的名称和内容初始化 XElement 类的新实例。 |
XElement(XName, Object[]) | 用指定的名称和内容初始化 XElement 类的新实例。 |
属性
名称 | 说明 |
---|---|
BaseUri | 获取此 XObject 的基 URI。 (继承自 XObject。) |
Document | 获取此 XObject 的 XDocument。 (继承自 XObject。) |
EmptySequence | 获取空的元素集合。 |
FirstAttribute | 获取此元素的第一个属性。 |
FirstNode | 获取此节点的第一个子节点。 (继承自 XContainer。) |
HasAttributes | 获取一个值,该值指示此元素是否至少具有一个属性。 |
HasElements | 获取一个值,该值指示此元素是否至少具有一个子元素。 |
IsEmpty | 获取一个值,该值指示此元素是否不包含内容。 |
LastAttribute | 获取此元素的最后一个属性。 |
LastNode | 获取此节点的最后一个子节点。 (继承自 XContainer。) |
Name | 获取或设置此元素的名称。 |
NextNode | 获取此节点的下一个同级节点。 (继承自 XNode。) |
NodeType | 获取此节点的节点类型。 (重写 XObject.NodeType。) |
Parent | 获取此 XObject 的父级 XElement。 (继承自 XObject。) |
PreviousNode | 获取此节点的上一个同级节点。 (继承自 XNode。) |
Value | 获取或设置此元素的串连文本内容。 |
方法
名称 | 说明 |
---|---|
Add(Object) | 将指定的内容添加为此 XContainer 的子级。 (继承自 XContainer。) |
Add(Object[]) | 将指定的内容添加为此 XContainer 的子级。 (继承自 XContainer。) |
AddAfterSelf(Object) | 紧跟在此节点之后添加指定的内容。 (继承自 XNode。) |
AddAfterSelf(Object[]) | 紧跟在此节点之后添加指定的内容。 (继承自 XNode。) |
AddAnnotation | 将对象添加到此 XObject 的批注列表。 (继承自 XObject。) |
AddBeforeSelf(Object) | 紧邻此节点之前添加指定的内容。 (继承自 XNode。) |
AddBeforeSelf(Object[]) | 紧邻此节点之前添加指定的内容。 (继承自 XNode。) |
AddFirst(Object) | 将指定的内容作为此文档或元素的第一个子级添加。 (继承自 XContainer。) |
AddFirst(Object[]) | 将指定的内容作为此文档或元素的第一个子级添加。 (继承自 XContainer。) |
Ancestors() | 返回此节点的上级元素的集合。 (继承自 XNode。) |
Ancestors(XName) | 返回此节点的经过筛选的上级元素的集合。 集合中只包括具有匹配 XName 的元素。 (继承自 XNode。) |
AncestorsAndSelf() | 返回元素集合,其中包含此元素及其上级。 |
AncestorsAndSelf(XName) | 返回经过筛选的元素集合,其中包含此元素及其上级。 集合中只包括具有匹配 XName 的元素。 |
Annotation(Type) | 从此 XObject 获取指定类型的第一个批注对象。 (继承自 XObject。) |
Annotation<T>() | 从此 XObject 获取指定类型的第一个批注对象。 (继承自 XObject。) |
Annotations(Type) | 获取此 XObject 的指定类型的批注集合。 (继承自 XObject。) |
Annotations<T>() | 获取此 XObject 的指定类型的批注集合。 (继承自 XObject。) |
Attribute | 返回具有指定 XName 的此 XElement 的 XAttribute。 |
Attributes() | 返回此元素的属性集合。 |
Attributes(XName) | 返回经过筛选的此元素的属性集合。 集合中只包括具有匹配 XName 的元素。 |
CreateReader() | 创建此节点的 XmlReader。 (继承自 XNode。) |
CreateReader(ReaderOptions) | 使用 readerOptions 参数指定的选项创建 XmlReader。 (继承自 XNode。) |
CreateWriter | 创建可用于将节点添加至 XContainer 的 XmlWriter。 (继承自 XContainer。) |
DescendantNodes | 按文档顺序返回此文档或元素的子代节点集合。 (继承自 XContainer。) |
DescendantNodesAndSelf | 返回节点的集合,而这些节点包含此元素以及此元素的所有子代节点,并将它们按文档顺序排列。 |
Descendants() | 按文档顺序返回此文档或元素的子代元素集合。 (继承自 XContainer。) |
Descendants(XName) | 按文档顺序返回此文档或元素的经过筛选的子代元素集合。 集合中只包括具有匹配 XName 的元素。 (继承自XContainer。) |
DescendantsAndSelf() | 返回元素的集合,而这些元素包含此元素以及此元素的所有子代元素,并按文档顺序排列它们。 |
DescendantsAndSelf(XName) | 返回经过筛选的元素集合,这些元素包含此元素以及此元素的所有子代元素,并按文档顺序排列它们。 集合中只包括具有匹配 XName 的元素。 |
Element | 获取具有指定 XName 的第一个(按文档顺序)子元素。 (继承自 XContainer。) |
Elements() | 按文档顺序返回此元素或文档的子元素集合。 (继承自 XContainer。) |
Elements(XName) | 按文档顺序返回此元素或文档的经过筛选的子元素集合。 集合中只包括具有匹配 XName 的元素。 (继承自XContainer。) |
ElementsAfterSelf() | 按文档顺序返回此节点后的同级元素集合。 (继承自 XNode。) |
ElementsAfterSelf(XName) | 按文档顺序返回此节点后经过筛选的同级元素的集合。 集合中只包括具有匹配 XName 的元素。 (继承自 XNode。) |
ElementsBeforeSelf() | 按文档顺序返回此节点前的同级元素集合。 (继承自 XNode。) |
ElementsBeforeSelf(XName) | 按文档顺序返回此节点前经过筛选的同级元素的集合。 集合中只包括具有匹配 XName 的元素。 (继承自 XNode。) |
Equals(Object) | 确定指定的对象是否等于当前对象。 (继承自 Object。) |
Finalize | 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) |
GetDefaultNamespace | 获取此 XElement 的默认 XNamespace。 |
GetHashCode | 作为默认哈希函数。 (继承自 Object。) |
GetNamespaceOfPrefix | 获取此 XElement 的与特定前缀关联的命名空间。 |
GetPrefixOfNamespace | 获取与此 XElement 的命名空间关联的前缀。 |
GetType | 获取当前实例的 Type。 (继承自 Object。) |
IsAfter | 确定当前节点是否按文档顺序显示在指定节点之后。 (继承自 XNode。) |
IsBefore | 确定当前节点是否按文档顺序显示在指定节点之前。 (继承自 XNode。) |
Load(Stream) | 使用指定的流创建一个新的 XElement 实例。 |
Load(String) | 从文件加载 XElement。 |
Load(TextReader) | 从 TextReader 加载 XElement。 |
Load(XmlReader) | 从 XmlReader 加载 XElement。 |
Load(Stream, LoadOptions) | 使用指定流创建新的 XElement 实例,也可以选择保留空白,设置基 URI 和保留行信息。 |
Load(String, LoadOptions) | 从文件加载 XElement,还可以选择保留空白、设置基 URI 和保留行信息。 |
Load(TextReader, LoadOptions) | 从 TextReader 加载 XElement,还可以选择保留空白和行信息。 |
Load(XmlReader, LoadOptions) | 从 XmlReader 加载 XElement 时,可以选择保留空白、设置基 URI 和保留行信息。 |
MemberwiseClone | 创建当前 Object 的浅表副本。 (继承自 Object。) |
Nodes | 按文档顺序返回此元素或文档的子节点集合。 (继承自 XContainer。) |
NodesAfterSelf | 按文档顺序返回此节点后的同级节点的集合。 (继承自 XNode。) |
NodesBeforeSelf | 按文档顺序返回此节点前的同级节点的集合。 (继承自 XNode。) |
Parse(String) | 从包含 XML 的字符串加载 XElement。 |
Parse(String, LoadOptions) | 从包含 XML 的字符串加载 XElement,还可以选择保留空白和行信息。 |
Remove | 从节点父级中删除此节点。 (继承自 XNode。) |
RemoveAll | 从此 XElement 中移除节点和属性。 |
RemoveAnnotations(Type) | 从此 XObject 移除指定类型的批注。 (继承自 XObject。) |
RemoveAnnotations<T>() | 从此 XObject 移除指定类型的批注。 (继承自 XObject。) |
RemoveAttributes | 移除此 XElement 的属性。 |
RemoveNodes | 从此文档或元素中移除子节点。 (继承自 XContainer。) |
ReplaceAll(Object) | 使用指定的内容替换此元素的子节点和属性。 |
ReplaceAll(Object[]) | 使用指定的内容替换此元素的子节点和属性。 |
ReplaceAttributes(Object) | 使用指定的内容替换此元素的属性。 |
ReplaceAttributes(Object[]) | 使用指定的内容替换此元素的属性。 |
ReplaceNodes(Object) | 使用指定的内容替换此文档或元素的子节点。 (继承自 XContainer。) |
ReplaceNodes(Object[]) | 使用指定的内容替换此文档或元素的子节点。 (继承自 XContainer。) |
ReplaceWith(Object) | 使用指定的内容替换此节点。 (继承自 XNode。) |
ReplaceWith(Object[]) | 使用指定的内容替换此节点。 (继承自 XNode。) |
Save(Stream) | 将此 XElement 输出到指定的 Stream。 |
Save(String) | 将此元素序列化为文件。 |
Save(TextWriter) | 将此元素序列化为 TextWriter。 |
Save(XmlWriter) | 将此元素序列化为 XmlWriter。 |
Save(Stream, SaveOptions) | 将此 XElement 输出到指定的 Stream,(可选)并指定格式设置行为。 |
Save(String, SaveOptions) | 将此元素序列化为文件,并可以选择禁用格式设置。 |
Save(TextWriter, SaveOptions) | 将此元素序列化为 TextWriter,并可以选择禁用格式设置。 |
SetAttributeValue | 设置属性的值、添加属性或移除属性。 |
SetElementValue | 设置子元素的值、添加子元素或移除子元素。 |
SetValue | 设置此元素的值。 |
ToString() | 返回此节点的缩进 XML。 (继承自 XNode。) |
ToString(SaveOptions) | 返回此节点的 XML,还可以选择禁用格式设置。 (继承自 XNode。) |
WriteTo | 将此元素写入 XmlWriter。 (重写 XNode.WriteTo(XmlWriter)。) |
3.XAttribute
构造函数
名称 | 说明 |
---|---|
XAttribute(XAttribute) | 从其他 XAttribute 对象初始化 XAttribute 类的新实例。 |
XAttribute(XName, Object) | 从指定的名称和值初始化 XAttribute 类的新实例。 |
属性
名称 | 说明 |
---|---|
BaseUri | 获取此 XObject 的基 URI。 (继承自 XObject。) |
Document | 获取此 XObject 的 XDocument。 (继承自 XObject。) |
EmptySequence | 获取空的属性集合。 |
IsNamespaceDeclaration | 确定此属性是否为命名空间声明。 |
Name | 获取此属性 (Attribute) 的展开名称。 |
NextAttribute | 获取父元素的下一个属性 (Attribute)。 |
NodeType | 获取此节点的节点类型。 (重写 XObject.NodeType。) |
Parent | 获取此 XObject 的父级 XElement。 (继承自 XObject。) |
PreviousAttribute | 获取父元素的上一个属性 (Attribute)。 |
Value | 获取或设置此属性的值。 |
方法
名称 | 说明 |
---|---|
AddAnnotation | 将对象添加到此 XObject 的批注列表。 (继承自 XObject。) |
Annotation(Type) | 从此 XObject 获取指定类型的第一个批注对象。 (继承自 XObject。) |
Annotation<T>() | 从此 XObject 获取指定类型的第一个批注对象。 (继承自 XObject。) |
Annotations(Type) | 获取此 XObject 的指定类型的批注集合。 (继承自 XObject。) |
Annotations<T>() | 获取此 XObject 的指定类型的批注集合。 (继承自 XObject。) |
Equals(Object) | 确定指定的对象是否等于当前对象。 (继承自 Object。) |
Finalize | 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) |
GetHashCode | 作为默认哈希函数。 (继承自 Object。) |
GetType | 获取当前实例的 Type。 (继承自 Object。) |
MemberwiseClone | 创建当前 Object 的浅表副本。 (继承自 Object。) |
Remove | 从此属性的父元素中移除它。 |
RemoveAnnotations(Type) | 从此 XObject 移除指定类型的批注。 (继承自 XObject。) |
RemoveAnnotations<T>() | 从此 XObject 移除指定类型的批注。 (继承自 XObject。) |
SetValue | 设置此属性的值。 |
ToString | 将当前的 XAttribute 对象转换为字符串表示形式。 (重写 Object.ToString()。) |
简单示例
1.创建XML
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(@"C:\Books.xml");
2.添加元素
///导入XML文件 XElement xe = XElement.Load(@"C:\Books.xml"); ///创建一个新节点 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(@"C:\Books.xml");
3.修改元素
XElement xe = XElement.Load(@"C:\Books.xml"); ///查询修改的元素 IEnumerable<XElement> element = from e in xe.Elements("Book") where e.Attribute("BookID").Value == "xxx" //xxx指定的修改元素 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(@"C:\Books.xml");
4.删除元素
XElement xe = XElement.Load(@"C:\Books.xml"); ///查询修改的元素 IEnumerable<XElement> element = from e in xe.Elements("Book") where e.Attribute("BookID").Value == "xxx" //xxx 指定删除元素 select e; ///修改元素 if (element.Count() > 0) { XElement firstelement = element.First(); ///删除此元素的所有节点和属性 firstelement.RemoveAll(); ///删除此元素的属性 //firstelement.RemoveAttributes(); ///删除此元素的子节点 //firstelement.RemoveNodes(); } xe.Save(@"C:\Books.xml");
5.一些常用查询
XElement xe = XElement.Load(@"C:\Books.xml"); //查询元素并排序 var elements = xe.Elements("Book") .Where(e => Convert.ToInt32(e.Attribute("BookID").Value.Substring(e.Attribute("BookID").Value.Length - 1, 1)) > 1) .OrderByDescending(e => (string)e.Element("BookName")) .ToList(); //查询指定元素的子元素 var elements = xe.Elements("Book") .Descendants("xxx") //xxx 指定元素 .ToList(); //查询指定属性的元素 var eAttribute = xe.Elements("Book") .Where(e => (string)e.Attribute("BookID") == "xxx") //xxx 指定属性 .OrderBy(e => e.Element("BookID")) .ToList(); //查询指定名称的元素 var elements = xe.Elements("Book") .Where(e => (string)e.Element("BookName") == "xxx") //指定元素名称 .OrderBy(e => e.Element("BookID")) .ToList();
到这里结束了,现在感觉LINQ to XML 是不是很简单啊,相信你会喜欢上Linq语法的。
本文只着重介绍了LINQ to XML 类的 XElement、XAttribute和XDocument三个类,当然还有其他的一些,这里就不作详细介绍了,如需查看请点此跳转到MSDN LINQ to XML 类概述。
感谢您的阅读,如有任何建议请评论提出。
感觉还不错,请推荐下,谢谢。