Compartir a través de


Construcción funcional (LINQ to XML)

Actualización: November 2007

LINQ to XML proporciona una forma eficaz de crear elementos XML denominados construcción funcional. La construcción funcional es la capacidad de crear un árbol XML en una sola instrucción.

Hay varias características fundamentales de la interfaz de programación de LINQ to XML que permiten la construcción funcional:

  • El constructor XElement toma varios tipos de argumentos para el contenido. Por ejemplo, puede pasar otro objeto XElement, que se convierte en un elemento secundario. Puede pasar un objeto XAttribute, que se convierte en un atributo del elemento. O bien, puede pasar cualquier otro tipo de objeto, que se convierte en una cadena y en el contenido de texto del elemento.

  • El constructor XElement toma una matriz de params del tipo Object, de forma que puede pasar cualquier número de objetos al constructor. Esto permite crear un elemento que tiene un contenido complejo.

  • Si un objeto implementa IEnumerable<T>, se enumera la recopilación del objeto y se agregan todos los elementos de la recopilación. Si la recopilación contiene objetos XElement o XAttribute, cada elemento de la recopilación se agrega por separado. Esto es importante porque permite pasar los resultados de una consulta de LINQ al constructor.

Estas características permiten escribir código para crear un árbol XML. A continuación se muestra un ejemplo:

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")
            )
        )
    );

Estas características también permiten escribir código que utiliza los resultados de las consultas de LINQ cuando crea un árbol XML, de la siguiente manera:

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);

En Visual Basic se consigue lo mismo mediante los literales 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)

Este ejemplo genera el siguiente resultado:

<Root>
  <Child>1</Child>
  <Child>2</Child>
  <Element>3</Element>
  <Element>4</Element>
  <Element>5</Element>
</Root>

Vea también

Conceptos

Crear árboles XML