C# LINQtoXML函数构造方式
可在代码中用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()方法后,就结束程序。
点击加载更多评论>>