Introduzione ai valori letterali XML in Visual Basic
In questa sezione vengono fornite informazioni sulla creazione di strutture ad albero XML in Visual Basic.
Per ulteriori informazioni sull'utilizzo dei risultati di query LINQ come contenuto di una struttura ad albero XML, vedere Costruzione funzionale (LINQ to XML).
Per ulteriori informazioni sui valori letterali XML in Visual Basic, vedere Cenni preliminari su LINQ to XML in Visual Basic.
Creazione di strutture ad albero XML
Nell'esempio seguente viene illustrato come creare un oggetto XElement, in questo caso contacts.
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>
Creazione di un 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)
L'output ottenuto eseguendo l'esempio è il seguente:
<Customer>Adventure Works</Customer>
Creazione di un elemento vuoto
È possibile creare un oggetto XElement vuoto, come illustrato di seguito:
Dim n As XElement = <Customer/>
Console.WriteLine(n)
L'output ottenuto eseguendo l'esempio è il seguente:
<Customer />
Utilizzo di espressioni incorporate
Un'importante funzionalità dei valori letterali XML è che consentono di utilizzare espressioni incorporate.Con le espressioni incorporate è possibile valutare un'espressione e inserirne i risultati nella struttura ad albero XML.Se l'espressione restituisce un tipo di XElement, nella struttura ad albero viene inserito un elemento.Se l'espressione restituisce un tipo di XAttribute, nella struttura ad albero viene inserito un attributo.È possibile inserire elementi e attributi nella struttura ad 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 utilizzare il carattere di continuazione di riga.
Se si utilizza un'espressione incorporata per aggiungere nodi (inclusi elementi) e attributi esistenti a una nuova struttura ad albero XML e se per i nodi esistenti è già presente un elemento padre, i nodi vengono duplicati.I nuovi nodi duplicati vengono collegati alla nuova struttura ad albero XML.Se per i nodi esistenti non è presente un elemento padre, i nodi vengono semplicemente collegati alla nuova struttura ad albero XML.Tale comportamento è illustrato nell'ultimo esempio di questo argomento.
Nell'esempio seguente viene utilizzata un'espressione incorporata per inserire un elemento nella struttura ad albero.
Dim xmlTree1 As XElement = _
<Root>
<Child>Contents</Child>
</Root>
Dim xmlTree2 As XElement = _
<Root>
<%= xmlTree1.<Child> %>
</Root>
Console.WriteLine(xmlTree2)
L'output ottenuto eseguendo l'esempio è il seguente:
<Root>
<Child>Contents</Child>
</Root>
Utilizzo di espressioni incorporate per il contenuto
È possibile utilizzare 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)
L'output ottenuto eseguendo l'esempio è il seguente:
<Root>Some content</Root>
Utilizzo di una query LINQ in un'espressione incorporata
È possibile utilizzare i risultati di una query LINQ per 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)
L'output ottenuto eseguendo l'esempio è il seguente:
<Root>
<Child>1</Child>
<Child>2</Child>
<Child>3</Child>
</Root>
Utilizzo di espressioni incorporate per i nomi di nodo
È inoltre possibile utilizzare espressioni incorporate 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)
L'output ottenuto eseguendo l'esempio è il seguente:
<Root att="aValue">
<ele>eValue</ele>
</Root>
Duplicazione ecollegamento
Come accennato in precedenza, se si utilizza un'espressione incorporata per aggiungere nodi (inclusi elementi) e attributi esistenti a una nuova struttura ad albero XML e se per i nodi esistenti è già presente un elemento padre, i nodi vengono duplicati. I nodi appena duplicati vengono quindi collegati alla nuova struttura ad albero.Se per i nodi esistenti non è presente un elemento padre, i nodi vengono semplicemente collegati alla nuova struttura ad albero XML.
' Create a tree with a child element.
Dim xmlTree1 As XElement = _
<Root>
<Child1>1</Child1>
</Root>
' Create an element that is 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"))
L'output ottenuto eseguendo l'esempio è il seguente:
Child1 was cloned
Child2 was attached