Construcción funcional (LINQ to XML)

LINQ to XML proporciona una manera eficaz de crear elementos XML denominada construcción funcional. La construcción funcional le permite crear un árbol XML en una sola instrucción.

En la construcción funcional se usan varias características clave de la interfaz de programación LINQ to XML:

  • 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 colección del objeto y se agregan todos los elementos de la colección. Si la colección contiene objetos XElement o XAttribute, cada elemento de la colección se agrega por separado. Esto es importante porque le permite pasar los resultados de una consulta LINQ al constructor.

Ejemplo: Creación de un árbol XML

Puede usar la construcción funcional para 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")
            )
        )
    );

Ejemplo: Creación de un árbol XML mediante los resultados de la consulta LINQ

Estas características también permiten escribir código que usa los resultados de las consultas LINQ cuando crea un árbol XML, como en el siguiente ejemplo:

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 produce el siguiente resultado:

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

Vea también