栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > 其他 > xml语言

LINQ to XML 编程基础的图文代码详细介绍

xml语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LINQ to XML 编程基础的图文代码详细介绍

1、LINQ to XML类

以下的代码演示了如何使用LINQ to XML来快速创建一个xml:


隐藏行号 复制代码 ? 创建 XML

public static void Createdocument(){    string path = @"d:website";    Xdocument xdoc = new Xdocument(new XDeclaration("1.0", "utf-8", "yes"),                                   new XElement("Root", "root"));    xdoc.Save(path);}

运行该示例将会得到一个xml文件,其内容为:

root

2、XElement类

XElement 类是 LINQ to XML 中的基础类之一。 它表示一个 XML 元素。 可以使用该类创建元素;更改元素内容;添加、更改或删除子元素;向元素中添加属性;或以文本格式序列化元素内容。 还可以与 System.Xml 中的其他类(例如 XmlReader、XmlWriter 和 XslCompiledTransform)进行互操作。

使用LINQ to XML创建xml文档有很多种方式,具体使用哪种方法要根据实际需要。而创建xml文档最简单、最常见的方式是使用XElement类。以下的代码演示了如何使用XElement类创建一个xml文档:

显示行号 复制代码 ? 这是一段程序代码。

public static void CreateCategories(){    string path = @"d:website";    XElement root = new XElement("Categories",        new XElement("Category",            new XElement("CategoryID", Guid.NewGuid()),            new XElement("CategoryName", "Beverages")            ),        new XElement("Category",            new XElement("CategoryID", Guid.NewGuid()),            new XElement("CategoryName", "Condiments")            ),        new XElement("Category",            new XElement("CategoryID", Guid.NewGuid()),            new XElement("CategoryName", "Confections")            )       );    root.Save(path);}

运行该示例将会得到一个xml文件,其内容为:

      57485174-46fc-4e8c-8d98-d25b53d504a1    Beverages        1474dde1-8014-48f7-b093-b47ca5d5b770    Condiments        364224e0-e002-4939-90fc-0fd93e0cf35b    Confections  


XElement类包含了许多方法,这些方法使得处理xml变得轻而易举。有关这些方法请参照MSDN。

其中,Save、CreateReader、ToString和WriteTo方法是比较常用的三个方法:

3、XAttribute类

XAttribute类用来处理元素的属性,属性是与元素相关联的“名称-值”对,每个元素中不能有名称重复的属性。使用XAttribute类与使用XElement类的操作十分相似,下面的示例演示了如何在创建xml树时为其添加一个属性:

显示行号 复制代码 ? 这是一段程序代码。

public static XElement CreateCategoriesByXAttribute(){    XElement root = new XElement("Categories",        new XElement("Category",            new XAttribute("CategoryID", Guid.NewGuid()),            new XElement("CategoryName", "Beverages")            ),        new XElement("Category",            new XAttribute("CategoryID", Guid.NewGuid()),            new XElement("CategoryName", "Condiments")            ),        new XElement("Category",            new XAttribute("CategoryID", Guid.NewGuid()),            new XElement("CategoryName", "Confections")            )       );    root.Save(path);    return root;}

运行该示例将会得到一个xml文件,其内容为:

      Beverages        Condiments        Confections  

XAttribute类的方法比较少,常用的三个是:

以下的示例使用Remove来删除第一个元素的CategoryID属性:

显示行号 复制代码 ? 这是一段程序代码。

public static void RemoveAttribute(){    XElement xdoc = CreateCategoriesByXAttribute();    XAttribute xattr = xdoc.Element("Category").Attribute("CategoryID");    xattr.Remove();    xdoc.Save(path);}

运行该示例将会得到一个xml文件,其内容为:

      Beverages        Condiments        Confections  

作为尝试,试一试以下删除属性的方法:

public static void RemoveAttributeByDoc(){    XElement xdoc = CreateCategoriesByXAttribute();    XAttribute xattr = xdoc.Attribute("CategoryID");    xattr.Remove();    xdoc.Save(path);}

运行该示例将会抛出一个空引用异常,因为元素Categories没有一个叫做CategoryID的属性。

4、Xdocument类

Xdocument类提供了处理xml文档的方法,包括声明、注释和处理指令。一个Xdocument对象可以包含以下内容:

下面的示例创建了一个简单的xml文档,它包含几个元素和一个属性,以及一个处理指令和一些注释:

public static void CreateXdocument()      {          Xdocument xdoc = new Xdocument(                  new XProcessingInstruction("xml-stylesheet", "title='EmpInfo'"),                  new XComment("some comments"),                  new XElement("Root",                          new XElement("Employees",                                  new XElement("Employee",                                          new XAttribute("id", "1"),                                          new XElement("Name", "Scott Klein"),                                          new XElement("Title", "Geek"),                                          new XElement("HireDate", "02/05/2007"),                                          new XElement("Gender", "M")                                      )                              )                      ),                  new XComment("more comments")              );          xdoc.Save(path);      }


运行该示例将会得到一个xml文件,其内容为:

            Scott Klein      Geek      02/05/2007      M      

Xdocument类包含多个与XElement类相同的方法,具体内容可以参阅MSDN。需要注意的是,处理节点和元素的大部分功能都可以通过XElement获得,只有当绝对需要文档层次的处理能力,以及需要访问注释、处理指令和声明时,才有使用Xdocument类的必要。

创建了xml文档后,可以使用NodesAfterSelf方法返回指定的XElement元素之后的所有同级元素。需要注意的是,此方法只包括返回集合中的同级元素,而不包括子代。此方法使用延迟执行。以下代码演示了这一过程:

显示行号 复制代码 ? 这是一段程序代码。

public static void NodesAfterSelf(){    XElement root = new XElement("Categories",        new XElement("Category",                new XElement("CategoryID", Guid.NewGuid()),                new XElement("CategoryName", "食品"),                new XElement("Description", "可以吃的东西")            )        );    foreach (var item in root.Element("Category").Element("CategoryID").NodesAfterSelf())    {        Console.WriteLine((item as XElement).Value);    }}

二、LINQ to XML编程概念

本节将介绍LINQ to XML编程的相关概念,例如如何加载xml、创建全新xml、操纵xml的信息以及遍历xml文档。

1、加载已有的xml

使用LINQ to XML加载xml可以从多种数据源获得,例如字符串、XmlReader、TextReader或文件。

下面的示例演示了如何从文件中加载xml:

public static void LoadFromFile(){    XElement root = XElement.Load(path);    Console.WriteLi


也可以使用Parse方法从一个字符串加载xml:

public static void LoadFromString()    {        XElement root = XElement.Parse(@"                  1        Beverages        Soft drinks, coffees, teas, beers, and ales          ");        Console.WriteLine(root.ToString());    }

2、保存xml

在前面的示例中曾多次调用XElement对象的Save方法来保存xml文档,在这里就不冗述了。

3、创建xml

在前面的示例中曾多次调用XElement对象的构造函数来创建xml文档,在这里就不冗述了。需要说明的是,在使用LINQ to XML创建xml文档时,会有代码缩进,这使代码的可读性大大加强。

4、遍历xml

使用LINQ to XML在xml树中遍历xml是相当简单的。只需要使用XElement和XAttribute类中所提供的方法。Elements和Element方法提供了定位到某个或某些元素的方式。下面的示例演示了如何遍历xml树,并获取指定元素的方式:

public static void Enum(){    XElement root = new XElement("Categories");    using (NorthwindDataContext db = new NorthwindDataContext())    {        root.Add(                db.Categories                .Select                (                    c => new XElement                    (                        "Category"                        , new XElement("CategoryName", c.CategoryName)                    )                )            );    }    foreach (var item in root.Elements("Category"))    {        Console.WriteLine(item.Element("CategoryName").Value);    }}

上述代码运行的结果为:

是不是很简单呢?Nodes()、Elements()、Element(name)和Elements(name)方法为xml树的导航提供了基本功能。

5、操纵xml

LINQ to XML一个重要的特性是能够方便地修改xml树,如添加、删除、更新和复制xml文档的内容。

I.插入

使用XNode类的插入方法可以方便地向xml树添加内容:

在下面的示例中,使用AddAfterSelf方法向现有xml中添加一个新节点:

public static void AddAfterSelf(){    XElement root = XElement.Parse(@"                              1            Beverages            Soft drinks, coffees, teas, beers, and ales                      ");    XElement xele = root.Element("Category").Element("CategoryName");    xele.AddAfterSelf(new XElement("AddDate", DateTime.Now));    root.Save(path);}

运行该示例将会得到一个xml文件,其内容为:

      1    Beverages    2010-01-31T03:08:51.813736+08:00    Soft drinks, coffees, teas, beers, and ales  

当需要添加一个元素到指定节点之前时,可以使用AddBeforeSelf方法。

II.更新

在LINQ to XML中更新xml内容可以使用以下几种方法:

在下面的示例中使用了ReplaceWith与SetElementValue方法对xml进行了更新操作:

public static void Update(){    XElement root = XElement.Parse(@"                                                                                                                 1                                        Beverages                                        Soft drinks, coffees, teas, beers, and ales                                                                                                            ");    root.Element("Category").Element("CategoryID").ReplaceWith(new XElement("ID", "2"));    root.Element("Category").SetElementValue("CategoryName", "test data");    root.Save(path);}

运行该示例将会得到一个xml文件,其内容为:

      2    test data    Soft drinks, coffees, teas, beers, and ales  

III.删除

可以使用Remove(XElement)与RemoveAll方法来删除xml。

在下面的示例中,使用了RemoveAll方法:

}  public static void Remove()  {      string path = @"d:";      XElement root = XElement.Parse(@"                                                                                                            1                                      Beverages                                      Soft drinks, coffees, teas, beers, and ales                                                                                                      ");      root.RemoveAll();      root.Save(path);  }

运行该示例将会得到一个xml文件,其内容为:

在下面的示例中,使用了Remove方法删除了xml的Description元素:

public static void Remove(){    XElement root = XElement.Parse(@"                                                                                                      1                                    Beverages                                    Soft drinks, coffees, teas, beers, and ales                                                                                                  ");    root.Element("Category").Element("Description").Remove();    root.Save(path);}

运行该示例将会得到一个xml文件,其内容为:

      1    Beverages  

6、处理属性

I.添加

LINQ to XML添加属性与添加元素师类似的,可以使用构造函数或者Add方法来添加属性:

public static void AddAttribute(){    XElement root = new XElement("Categories",        new XElement("Category",            new XAttribute("CategoryID", "1"),            new XElement("CategoryName", "Beverages"),            new XElement("Description", "Soft drinks, coffees, teas, beers, and ales")        )    );    root.Element("Category").Add(new XAttribute("AddDate", DateTime.Now.ToShortDateString()));    root.Save(path);}

运行该示例将会得到一个xml文件,其内容为:

      Beverages    Soft drinks, coffees, teas, beers, and ales  

II.检索

检索属性可以使用Attribute(name)方法:

显示行号 复制代码 ? 这是一段程序代码。

public static void SelectAttribute(){    XElement root = new XElement("Categories",        new XElement("Category",            new XAttribute("CategoryID", "1"),            new XElement("CategoryName", "Beverages"),            new XElement("Description", "Soft drinks, coffees, teas, beers, and ales")        )    );    XAttribute xattr = root.Element("Category").Attribute("CategoryID");    Console.WriteLine(xattr.Name);    Console.WriteLine(xattr.Value);}

上述代码的运行结果为:

CategoryID1

本文总结

本文介绍了LINQ to XML的编程基础,即System.Xml.Linq命名空间中的多个LINQ to XML类,这些类都是LINQ to XML的支持类,它们使得处理xml比使用其他的xml工具容易得多。在本文中,着重介绍的是XElement、XAttribute和Xdocument。

以上就是LINQ to XML 编程基础的图文代码详细介绍的内容,更多相关内容请关注PHP中文网(www.kaotop.com)!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/794710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号