Valori letterali XML in Visual Basic (LINQ to XML)
Questo articolo fornisce informazioni sulla creazione di alberi XML in Visual Basic tramite valori letterali XML ed espressioni incorporate.
Esempio: Usare valori letterali XML per creare un albero XML
Nell'esempio seguente viene illustrato come creare un oggetto XElement, in questo caso contacts
, con valori letterali XML:
Dim contacts As XElement = _
<Contacts>
<Contact>
<Name>Patrick Hines</Name>
<Phone>206-555-0144</Phone>
<Address>
<Street1>123 Main St</Street1>
<City>Mercer Island</City>
<State>WA</State>
<Postal>68042</Postal>
</Address>
</Contact>
</Contacts>
Esempio: Usare valori letterali XML per creare un oggetto XElement con contenuto semplice
È possibile creare un oggetto XElement con contenuto semplice, come illustrato di seguito:
Dim n as XElement = <Customer>Adventure Works</Customer>
Console.WriteLine(n)
Nell'esempio viene prodotto l'output seguente:
<Customer>Adventure Works</Customer>
Esempio: Usare un valore letterale XML per creare un elemento vuoto
È possibile creare un oggetto XElement vuoto, come illustrato di seguito:
Dim n As XElement = <Customer/>
Console.WriteLine(n)
Nell'esempio viene prodotto l'output seguente:
<Customer />
Usare espressioni incorporate per creare contenuti
Un'importante funzionalità dei valori letterali XML è che consentono di usare espressioni incorporate. Con le espressioni incorporate è possibile valutare un'espressione e inserirne i risultati nell'albero XML. Se l'espressione restituisce un tipo di XElement, nell'albero viene inserito un elemento. Se l'espressione restituisce un tipo di XAttribute, nell'albero viene inserito un attributo. È possibile inserire elementi e attributi nell'albero solo nei casi in cui sono validi.
È importante notare che un'espressione incorporata può includere una sola espressione. Non è possibile incorporare più istruzioni. Se un'espressione si estende oltre una singola riga, è necessario usare il carattere di continuazione di riga.
Se si usa un'espressione incorporata per aggiungere nodi (inclusi elementi) e attributi esistenti a un nuovo albero XML e se per i nodi esistenti è già presente un elemento padre, i nodi vengono duplicati. I nuovi nodi duplicati vengono collegati al nuovo albero XML. Se per i nodi esistenti non è presente un elemento padre, i nodi vengono semplicemente collegati al nuovo albero XML. Questo comportamento è illustrato nell'ultimo esempio di questo articolo.
Esempio: Usare un'espressione incorporata per inserire un elemento
Nell'esempio seguente viene usata un'espressione incorporata per inserire un elemento nell'albero.
xmlTree1 As XElement = _
<Root>
<Child>Contents</Child>
</Root>
Dim xmlTree2 As XElement = _
<Root>
<%= xmlTree1.<Child> %>
</Root>
Console.WriteLine(xmlTree2)
Nell'esempio viene prodotto l'output seguente:
<Root>
<Child>Contents</Child>
</Root>
Esempio: Usare un'espressione incorporata per i contenuti
È possibile usare un'espressione incorporata per fornire il contenuto di un elemento:
Dim str As String
str = "Some content"
Dim root As XElement = <Root><%= str %></Root>
Console.WriteLine(root)
Nell'esempio viene prodotto l'output seguente:
<Root>Some content</Root>
Esempio: Usare una query LINQ in un'espressione incorporata
È possibile usare i risultati di una query LINQ per fornire il contenuto di un elemento:
Dim arr As Integer() = {1, 2, 3}
Dim n As XElement = _
<Root>
<%= From i In arr Select <Child><%= i %></Child> %>
</Root>
Console.WriteLine(n)
Nell'esempio viene prodotto l'output seguente:
<Root>
<Child>1</Child>
<Child>2</Child>
<Child>3</Child>
</Root>
Esempio: Usare un'espressione incorporata per fornire i nomi dei nodi
È possibile usare un'espressione incorporata anche per calcolare nomi e valori di attributi ed elementi:
Dim eleName As String = "ele"
Dim attName As String = "att"
Dim attValue As String = "aValue"
Dim eleValue As String = "eValue"
Dim n As XElement = _
<Root <%= attName %>=<%= attValue %>>
<<%= eleName %>>
<%= eleValue %>
</>
</Root>
Console.WriteLine(n)
Nell'esempio viene prodotto l'output seguente:
<Root att="aValue">
<ele>eValue</ele>
</Root>
Esempio: Usare un'espressione incorporata per clonare e collegare nodi
Come accennato in precedenza, se si usa un'espressione incorporata per aggiungere nodi (inclusi elementi) e attributi esistenti a un nuovo albero XML e se per i nodi aggiunti è già presente un elemento padre, i nodi vengono clonati e i cloni vengono collegati al nuovo albero XML. Se per i nodi esistenti non è presente un elemento padre, i nodi vengono semplicemente collegati al nuovo albero XML.
Nel codice seguente viene illustrato il diverso comportamento relativo all'aggiunta di un elemento con o senza elemento padre a una struttura ad albero.
' Create a tree with a child element.
Dim xmlTree1 As XElement = _
<Root>
<Child1>1</Child1>
</Root>
' Create an element that's not parented.
Dim child2 As XElement = <Child2>2</Child2>
' Create a tree and add Child1 and Child2 to it.
Dim xmlTree2 As XElement = _
<Root>
<%= xmlTree1.<Child1>(0) %>
<%= child2 %>
</Root>
' Compare Child1 identity.
Console.WriteLine("Child1 was {0}", _
IIf(xmlTree1.Element("Child1") Is xmlTree2.Element("Child1"), _
"attached", "cloned"))
' Compare Child2 identity.
Console.WriteLine("Child2 was {0}", _
IIf(child2 Is xmlTree2.Element("Child2"), _
"attached", "cloned"))
Nell'esempio viene prodotto l'output seguente:
Child1 was cloned
Child2 was attached