Costruzione funzionale (LINQ to XML)
In LINQ to XML viene fornito un metodo potente per creare elementi XML chiamati costruzione funzionale. Si tratta della capacità di creare un albero XML in un'istruzione singola.
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, 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 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")
)
)
);
Queste funzionalità consentono inoltre di scrivere codice in cui vengono usati i risultati delle query LINQ quando si crea un 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)
Questo esempio produce il seguente output:
<Root>
<Child>1</Child>
<Child>2</Child>
<Element>3</Element>
<Element>4</Element>
<Element>5</Element>
</Root>