函数构造 (LINQ to XML)
LINQ to XML 提供了一种强大的方法来创建称为“函数构造”的 XML 元素。 函数构造使你能够在单个语句中创建 XML 树。
LINQ to XML 编程接口的几个关键功能用于函数构造:
- XElement 构造函数可以对内容采用多种类型的参数。 例如,可以传递另一个 XElement 对象,该对象将成为一个子元素。 可以传递一个 XAttribute 对象,该对象将成为该元素的一个属性。 也可以传递任何其他类型的对象,该对象将转换为字符串并成为该元素的文本内容。
- XElement 函数采用类型为
params
的 Object 数组,因此可以向该构造函数传递任意数目的对象。 这使您可以创建具有复杂内容的元素。 - 如果对象实现 IEnumerable<T>,则枚举对象中的集合,并添加集合中的所有项。 如果集合包含 XElement 或 XAttribute 对象,则单独添加集合中的每一项。 这一功能很重要,因为它允许你将 LINQ 查询的结果传递给构造函数。
示例:创建 XML 树
可以使用函数构造编写代码来创建 XML 树。 以下是一个示例:
XElement contacts =
new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144"),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
)
);
示例:使用 LINQ 查询结果创建 XML 树
这些功能还使你能够在创建 XML 树时,编写使用 LINQ 查询结果的代码,如以下示例所示:
XElement srcTree = new XElement("Root",
new XElement("Element", 1),
new XElement("Element", 2),
new XElement("Element", 3),
new XElement("Element", 4),
new XElement("Element", 5)
);
XElement xmlTree = new XElement("Root",
new XElement("Child", 1),
new XElement("Child", 2),
from el in srcTree.Elements()
where (int)el > 2
select el
);
Console.WriteLine(xmlTree);
在 Visual Basic 中,通过 XML 文本可以完成同样的操作:
Dim srcTree As XElement = _
<Root>
<Element>1</Element>
<Element>2</Element>
<Element>3</Element>
<Element>4</Element>
<Element>5</Element>
</Root>
Dim xmlTree As XElement = _
<Root>
<Child>1</Child>
<Child>2</Child>
<%= From el In srcTree.Elements() _
Where CInt(el) > 2 _
Select el %>
</Root>
Console.WriteLine(xmlTree)
该示例产生下面的输出:
<Root>
<Child>1</Child>
<Child>2</Child>
<Element>3</Element>
<Element>4</Element>
<Element>5</Element>
</Root>