Construção funcional (LINQ to XML)

O LINQ to XML fornece um modo eficiente de criar elementos XML chamada construção funcional. A construção funcional permite criar uma árvore XML em uma única instrução.

Vários recursos principais da interface de programação LINQ to XML são usados na construção funcional:

  • O construtor XElement utiliza vários tipos de argumentos para o conteúdo. Por exemplo, você pode passar outro objeto XElement, que se torna um elemento filho. Você pode passar um objeto XAttribute, que se torna um atributo do elemento. Ou você pode passar qualquer outro tipo de objeto, que é convertido em uma cadeia de caracteres e torna-se o conteúdo de texto do elemento.
  • O construtor XElement utiliza uma matriz de params do tipo Object, para que você possa passar qualquer número de objetos para o construtor. Isso permite que você crie um elemento que tem o conteúdo complexo.
  • Se um objeto implementar IEnumerable<T>, a coleção no objeto será enumerada, e todos os itens da coleção serão adicionados. Se a coleção contiver objetos XElement ou XAttribute, cada item da coleção será adicionado separadamente. Isso é importante porque permite que você passe os resultados de uma consulta LINQ para o construtor.

Exemplo: Criar uma árvore XML

Você pode usar a construção funcional para escrever código para criar uma árvore XML. A seguir, é mostrado um exemplo:

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

Exemplo: criar uma árvore XML usando os resultados da consulta LINQ

Esses recursos também permitem que você escreva código que usa os resultados de consultas LINQ quando cria uma árvore XML, como no seguinte exemplo:

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

No Visual Basic, a mesma coisa é realizada com os literais 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)

Esse exemplo gera a saída a seguir:

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

Confira também