Costruzione funzionale (LINQ to XML)

In LINQ to XML è disponibile una potente funzionalità per la creazione di elementi XML, denominata costruzione funzionale. Per costruzione funzionale si intende la possibilità di creare una struttura ad albero XML in un'unica istruzione.  

Diverse funzionalità importanti dell'interfaccia di programmazione LINQ to XML consentono la costruzione funzionale:

  • 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.

Queste funzionalità consentono di scrivere codice per creare una struttura ad 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")
            )
        )
    );

Queste funzionalità consentono inoltre di scrivere codice in cui vengono utilizzati i risultati delle query LINQ quando si crea una struttura ad albero XML, come segue:

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

L'output ottenuto eseguendo l'esempio è il seguente:

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

Vedere anche

Concetti

Creazione di strutture ad albero XML