Con LINQ-to-Xml è possibile aggiungere nodi ed elementi XML in maniera dinamica. Ciò significa che non siamo vincolati a documenti XML dal contenuto prestabilito, come ad esempio quello del precedente post. Infatti, a partire da una sorgente dati e con una query, è possibile creare nodi, elementi ed attributi a seconda dei dati desiderati.
Un esempio sarà sicuramente chiarificatore. Supponiamo di avere una collection generica di sviluppatori: Alessandro, Mario e Diego (i nomi non sono affatto casuali! :-)). Alessandro e Mario sviluppano in .NET, Diego in VB 6. Dalla nostra collection vogliamo estrarre solo (ovviamente..) gli sviluppatori .NET e creare degli elementi XML per ciascuno sviluppatore. Per ciascun nodo, dovrà essere specificato un attributo che rappresenta il nome dello sviluppatore e un attributo che rappresenta la tecnologia.
Tutto questo si traduce, in codice Visual Basic 2008, in questo modo:
Dim developers As New Dictionary(Of String, String)
developers.Add("Alessandro", ".NET")
developers.Add("Mario", ".NET")
developers.Add("Diego", "VB6")
Dim documento As XDocument = <?xml version="1.0"?>
<Developers>
<%= From developer In developers _
Where (developer.Value = ".NET") _
Select _
<Developer Name=<%= developer.Key %> Platform=<%= developer.Value %>/> %>
</Developers>
Console.WriteLine(documento)
Console.ReadLine()
La query LINQ fa questo: per ciascun elemento della collection (From developer in developers), laddove il valore della proprietà Value di ciascun oggetto nella collection sia uguale a ".NET", lo seleziona e crea un elemento XML i cui attributi, specificati tramite i tag riportanti il simbolo percentuale (di cui abbiamo parlato qui), sono rappresentati rispettivamente dalle proprietà Key e Value dell'elemento stesso della collection.
Questa è una importantissima feature di LINQ, soprattutto quando si ha necessità di lavorare in modo dinamico con documenti XML.
Alessandro