位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# LINQtoXML函数构造方式

提问人:刘团圆发布时间:2020-12-10

    可在代码中用XMLDOM创建XML文挡,而LINQ to XML提供了一种更便捷的方式,称为函数构造方式(functional construction)。在这种方式中,构造函数的调用可以用反映;XML文档结构的方式嵌套。下面的示例就使用函数构造方式建立了一个包含顾客和订单的简单XML文档。


试一试 LINQ to XML: BeginningCSharp7_22_1 _LinqToXmlConstructors

按照下面的步骤在Visual Studio 2017中创建示例:

(1)在 C:\BeginningCShaip7\Chapter22目录中创建一个新的控制台应用程序 BeginningCSharp7_22_l LinqToXml Constructors。

(2)打开主源文件Program.cs。

(3)在Program.cs的开头处添加对System.XmLLinq名称空间的引用,如下所示:

using System;

using System.Collections,Generic;

using System.Linq;

using System.Xml.Linq;

using System.Text;

using static System.Console;

(4)在Program.es的Main()方法中添加如下代码:

static void Main{string[] args)

{

        XDocument xdoc = new XDocument( 

            new XElement ("customers", 

                new XElement("customer",

                    new XAttribute("ID", "A"),

                    new XAttribute("City", "New York"),

                    new XAttribute("Region", "North America"),

                    new XElement("order",

                        new XAttribute("Item", "Widget"), 

                        new XAttribute("Price", 100)

                    )

                    new XElement("order",

                        new XAttribute T'Item", "Tire"), 

                        new XAttribute("Price", 220)

                    )

                ),    

                new XElement("customer",

                    new XAttribute ("ID", "B"), 

                    new XAttribute ("City" r "Mumbai"), 

                    new XAttribute ("Region" , "Asia"), 

                    new XElement("order",

                        new XAttribute ("Item","Oven"), 

                        new XAttribute("Price", 501)

                    )

                )

            )

        );

        WriteLine(xdoc);

        Write("Program finished, press Enter/Return to continue:"); 

        ReadLine();

}

(5)编译并执行程序(按下F5键即可开始调试),输出结果如下所示:

<customers>

  <customer ID="A" City="New York" Region="North America"〉

    <order Item="Widget" Price="100" />

    <order Item="Tire" Price="200" />

  </customer>

  <customer ID="B" City="Mumbai" Region="Asia">

    <order Item="Oven" Price="501" />

  </customer>

</customers>

Program finished, press Enter/Return to continue:

    在输出屏幕上显示的XML文档包含前面示例中顾客/订单数据的一个简化版本。注意,XML文档的根元素是<customers>,它包含两个嵌套的<customer>元素,这两个元素又包含许多嵌套的<order>元素。<customer>元素具有两个特性:City和Region,<order>元素也有两个特性:Item和Price。

    按下Enter/Retum键,退出程序,关闭控制台屏幕。如果使用Ctrl+F5组合键(启动时不使用调试功能),就需要按Enter/Retum键两次。


示例说明

第一步是引用System.Xml.Linq名称空间。本章的所有XML示例都要求把这行代码添加到程序中:

    using System.Xml.Linq;

在创建项目时,System.Linq名称空间是默认包含的,但不包含System.XmLLinq名称空间,所以必须显式地添加这行代码。

接着调用LINQtoXML构造函数XDocument()、XElement()和XAttribute(),它们彼此嵌套,如下所示:

    XDocument xdoc = new XDocument{ 

        new XElement("customers", 

            new XElement("customer",

                new XAttribute("ID", "A"),

                ...

注意,这些代码看起来类似于XML本身,即文档包含元素,每个元素又包含特性和其他元素。下面依次分析这些构造函数:

• XDocument():在LINQ to XML构造函数层次结构中,最高层的对象是XDocument(),它表示完整的XML文档,在代码中如下所示:

static void Main(string[] args)

{

        XDocument xdoc = new XDocument(

...

        };

    在前面的代码段中,省略了XDocumentO的参数列表,因此可以看到XDocument()调用在何处开始和结束。与所有LINQtoXML构造函数一样,XDocument()也把对象数组(object[])作为它的参数之一,以便给它传递其他构造函数创建的其他多个对象。在这个程序中调用的所有其他构造函数都是XDocument()构造函数的参数。这个程序传递的第一个也是唯一一个参数是XElement()构造函数。

• XElement(): XML文档必须有一个根元素,所以大多数情况下,XDocumentO的参数列表都以一个XElement对象开头。XElementO构造函数把元素名作为字符串,其后是包含在该元素中的一个XML对象列表。本例中的根元素是customers,它又包含一个customer元素列表:

    new XElement("customers",

        new XElement("customer",

...

        ),

...

        )

customer元素不包含其他XML元素,只包含3个XML特性,它们用XAttribute()构造函数构建。

  • XAttribute():这里给 customer 元素添加了 3个 XML特性:ID、City 和 Region:

    new XAttribute("ID", "A"),

    new XAttribute("City", "New York"),

    new XAttribute("Region", "North America"),

根据定义,XML特性是一个XML叶节点,它不包含其他XML节点,所以XAttributeQ构造函数的参数只有特性的名称和值。本例中生成的3个特性是ID="A"、City="New York"和Region="North America"。

  •其他LINQ to XML构造函数:这个程序中没有调用它们,但所有XML节点类型都有其他LINQto XML构造函数,例如,XDedarationO用于XML文档开头的XML声明,XComment()用于XML注释等。这些构造函数不太常用,但如果需要它们来精确控制XML文档的格式化,就可以使用它们。

下面继续解释第一个示例:在customer元素的ID, City和Region特性后面再添加两个子order元素:

    new XElement ("order='r/

        new XAttribute("Item" "Widget"),

        new XAttribute("Price", 100)

    ),

    new XElement ("order",

        new XAttribute("Item", "Tire"), 

        new XAttribute("Price", 200)

    )

这些order元素都有两个特性:Item和Price,但没有子元素。

接着将XDocument的内容显示在控制台屏幕上:

    WriteLine(xdoc);

这行代码使用XDociimentO的默认方法ToString()输出XML文挡的文本。

最后暂停屏幕,以便查看控制台输出,再等待用户按下回车键:

    Write("Program finished, press Enter/Return to continue:");

    ReadLine();

程序退出Main()方法后,就结束程序。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部