首页 > 代码库 > LINQ to XML基本操作

LINQ to XML基本操作

Linq to XML同样是对原C#访问XML文件的方法的封装,简化了用xpath进行xml的查询以及增加,修改,删除xml元素的操作。

LINQ to XML 三个最重要类:XElement、XAttribute 和 XDocument。

首先我们先介绍这三个类的基本属性和方法,然后再实现Linq to XML的 增删改查。

1.XDocument

构造函数     名称                            说明    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。)    GetDefaultNamespace                获取此 XElement 的默认 XNamespace。    GetNamespaceOfPrefix            获取此 XElement 的与特定前缀关联的命名空间。    GetPrefixOfNamespace            获取与此 XElement 的命名空间关联的前缀。    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 和保留行信息。    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)。)
View Code

 

 2.XElement

构造函数     名称                                说明    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。)    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 和保留行信息。    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)。)
View Code

 

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。)    Remove                                从此属性的父元素中移除它。    RemoveAnnotations(Type)                从此 XObject 移除指定类型的批注。 (继承自 XObject。)    RemoveAnnotations<T>()                从此 XObject 移除指定类型的批注。 (继承自 XObject。)    SetValue                            设置此属性的值。    ToString                            将当前的 XAttribute 对象转换为字符串表示形式。 (重写 Object.ToString()。)
View Code

 

 

简单示例

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 =http://www.mamicode.com/= "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 =http://www.mamicode.com/= "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 类概述。

 

感谢您的阅读,如有任何建议请评论提出,会改进的。

赶紧还不错,请推荐下,谢谢。  

 

LINQ to XML基本操作