Costruzione funzionale (LINQ to XML)
LINQ to XML consente di creare elementi XML denominati costruzione funzionale. La costruzione funzionale consente di creare un albero XML in una singola istruzione.
Diverse funzionalità chiave dell'interfaccia di programmazione LINQ to XML vengono usate nella 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 è 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 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")
)
)
);
Esempio: Creare un albero XML usando i risultati della query LINQ
Queste funzionalità consentono anche di scrivere codice che usa i risultati delle query LINQ quando si crea 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 la stessa operazione viene eseguita 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>