Condividi tramite


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

Vedi anche