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 contenente contenuto semplice, come indicato di seguito:

Dim n as XElement = <Customer>Adventure Works</Customer>
Console.WriteLine(n)

In questo esempio viene generato l'output seguente:

<Customer>Adventure Works</Customer>

Esempio: Usare un valore letterale XML per creare un elemento vuoto

È possibile creare un oggetto vuoto XElement, come indicato di seguito:

Dim n As XElement = <Customer/>
Console.WriteLine(n)

In questo esempio viene generato l'output seguente:

<Customer />

Usare espressioni incorporate per creare contenuto

Una funzionalità importante dei valori letterali XML è che consentono espressioni incorporate. Le espressioni incorporate consentono di valutare un'espressione e inserire i risultati dell'espressione nell'albero XML. Se l'espressione restituisce un tipo di XElement, un elemento viene inserito nell'albero. Se l'espressione restituisce un tipo di XAttribute, un attributo viene inserito nell'albero. È possibile inserire elementi e attributi nell'albero solo in cui sono validi.

È importante notare che solo una singola espressione può essere inserita in un'espressione incorporata. Non è possibile incorporare più istruzioni. Se un'espressione si estende oltre una singola riga, è necessario utilizzare il carattere di continuazione della riga.

Se si utilizza un'espressione incorporata per aggiungere nodi esistenti (inclusi elementi) e attributi a un nuovo albero XML e i nodi esistenti sono già associati a un genitore, i nodi vengono clonati. I nodi appena clonati vengono collegati alla nuova struttura ad albero XML. Se i nodi esistenti non sono padre, i nodi vengono semplicemente collegati al nuovo albero XML. L'ultimo esempio di questo articolo illustra questo.

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)

In questo esempio viene generato l'output seguente:

<Root>
  <Child>Contents</Child>
</Root>

Esempio: Usare un'espressione incorporata per il contenuto

È 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)

In questo esempio viene generato 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)

In questo esempio viene generato l'output seguente:

<Root>
  <Child>1</Child>
  <Child>2</Child>
  <Child>3</Child>
</Root>

Esempio: usare un'espressione incorporata per fornire nomi di nodo

È anche possibile usare un'espressione incorporata per calcolare i nomi degli attributi, i valori degli attributi, i nomi degli elementi e i valori degli 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)

In questo esempio viene generato 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 utilizza un'espressione incorporata per aggiungere nodi esistenti (compresi elementi) e attributi a un nuovo albero XML, e se i nodi da aggiungere sono già associati a un genitore, i nodi vengono clonati e i cloni sono collegati al nuovo albero XML. Se i nodi esistenti non hanno un nodo padre, vengono semplicemente collegati al nuovo albero XML.

Il codice seguente illustra il comportamento quando si aggiunge un elemento padre a un albero e quando si aggiunge un elemento senza elemento padre a un 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"))

In questo esempio viene generato l'output seguente:

Child1 was cloned
Child2 was attached

Vedere anche