LINQ-to-Xml mette a disposizione, come ormai noto, molti oggetti per leggere, creare ed interrogare documenti XML anche al fine di recuperare i dati di interesse dal loro interno, atteso che questo tipo di documento si usa anche com base dati.
Tramite gli XML Literals di Visual Basic 2008 e appositi metodi Extension, è possibile ottenere contenuti specifici del documento XML. Ad esempio, considerate il seguente snippet:
Dim Nodi = <Nodi>
<Nodo Nome="Primo nodo"/>
<Nodo Nome="Secondo nodo"/>
<NodoNonValido Nome="Terzo nodo"/>
<Nodo Nome="Quarto nodo"/>
</Nodi>
L'elemento Nodi contiene al suo interno tre elementi Nodo e un elemento chiamato NodoNonValido. Ok fin qui? :-) Ora, ipotizziamo di voler recuperare il valore dell'attributo Nome di ciascun elemento Nodo, escludendo, quindi, l'elemento chiamato NodoNonValido.
La seguente riga di codice recupera tutti gli elementi Nodo all'interno del documento XML:
Dim childElements = Nodi.<Nodo>
La sintassi sopra mostrata elenca tutti gli elementi figli del nodo XML specificato e caratterizzati dall'identificatore racchiuso tra i simboli < >. In realtà, questi simboli altro non sono che un metodo Extension chiamato Elements. Ora, considerate il seguente frammento:
For Each element In childElements
Console.WriteLine(element.@<Nome>)
Next
Viene iterata la collection di elementi XML recuperata tramite il metodo extension Elements di cui sopra e, per ciascun elemento della collection, ne viene recuperato l'attributo specificato e racchiuso ancora tra i simboli < >, anticipati dal simbolo @. Questo simbolo rappresenta una proprietà extension chiamata Attributes e, come il nome suggerisce, restituisce il valore dell'attributo XML specificato.
In sostanza, il risultato del codice sin qui mostrato sarà:
-
Primo nodo
-
Secondo nodo
-
Quarto nodo
Ovviamente questo è un piccolo esempio didattico, che spero potrete apprezzare nel momento in cui vi troverete a lavorare su documenti XML contenenti strutture di dati complesse.
Alessandro