函数构造 (LINQ to XML)

更新:November 2007

LINQ to XML 为创建 XML 元素提供了一种称为“函数构造”的有效方式。函数构造是指在单个语句中创建 XML 树的能力。

启用函数构造的 LINQ to XML 编程接口有几个重要功能:

  • XElement 构造函数可以对内容采用多种类型的参数。例如,可以传递另一个 XElement 对象,该对象将成为一个子元素。可以传递一个 XAttribute 对象,该对象将成为该元素的一个属性。也可以传递任何其他类型的对象,该对象将转换为字符串并成为该元素的文本内容。

  • XElement 函数采用类型为 Object 的 params 数组,因此可以向该构造函数传递任意数目的对象。这使您可以创建具有复杂内容的元素。

  • 如果对象实现 IEnumerable<T>,则枚举对象中的集合,并添加集合中的所有项。如果集合包含 XElementXAttribute 对象,则单独添加集合中的每一项。这一功能很重要,因为它允许您将 LINQ 查询的结果传递给构造函数。

这些功能使您能够编写代码来创建 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")
            )
        )
    );

这些功能还使您能够在创建 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>

请参见

概念

创建 XML 树