Costruzione funzionale (LINQ to XML)

LINQ to XML offre una potente funzionalità di creazione di elementi XML denominata costruzione funzionale. La costruzione funzionale consente di creare una struttura ad albero XML in un'unica istruzione.

Nella costruzione funzionale vengono usate numerose funzionalità chiave dell'interfaccia di programmazione LINQ to XML:

  • Il costruttore XElement accetta vari tipi di argomenti come contenuto. Ad esempio, è possibile passare un altro oggetto XElement, che diventa un elemento figlio. È possibile passare un oggetto XAttribute, che diventa un attributo dell'elemento. Oppure è possibile passare qualsiasi altro tipo di oggetto, che viene convertito in una stringa e diventa il contenuto di testo dell'elemento.
  • Il costruttore XElement accetta una matrice params di tipo Object, quindi è possibile passare qualsiasi numero di oggetti. In questo modo è possibile creare un elemento con contenuto complesso.
  • Se un oggetto implementa IEnumerable<T>, la raccolta nell'oggetto viene enumerata e vengono aggiunti tutti gli elementi della raccolta. Se la raccolta contiene oggetti XElement o XAttribute, ogni elemento della raccolta viene aggiunto separatamente. Questo aspetto è importante perché consente di passare i risultati di una query LINQ al costruttore.

Esempio: creare un albero XML

È possibile utilizzare la costruzione funzionale per scrivere codice in modo da creare un albero XML. Di seguito è riportato un esempio:

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

Esempio: creare un albero XML usando i risultati della query LINQ

Tali funzionalità consentono anche di scrivere codice che usa i risultati di query LINQ per creare un albero XML, come nell'esempio seguente:

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

In Visual Basic lo stesso risultato si ottiene con i valori letterali 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)

Nell'esempio viene prodotto l'output seguente:

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

Vedi anche