Dela via


XML-literaler i Visual Basic (LINQ till XML)

Den här artikeln innehåller information om hur du skapar XML-träd i Visual Basic med hjälp av XML-literaler och inbäddade uttryck.

Exempel: Använd XML-literaler för att skapa ett XML-träd

I följande exempel visas hur du skapar en XElement, i det här fallet contacts, med XML-literaler:

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>

Exempel: Använd XML-literaler för att skapa ett XElement med enkelt innehåll

Du kan skapa ett XElement som innehåller enkelt innehåll enligt följande:

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

Det här exemplet genererar följande utdata:

<Customer>Adventure Works</Customer>

Exempel: Använd en XML-literal för att skapa ett tomt element

Du kan skapa en tom XElement, enligt följande:

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

Det här exemplet genererar följande utdata:

<Customer />

Använda inbäddade uttryck för att skapa innehåll

En viktig funktion i XML-literaler är att de tillåter inbäddade uttryck. Med inbäddade uttryck kan du utvärdera ett uttryck och infoga resultatet av uttrycket i XML-trädet. Om uttrycket utvärderas till en typ av XElementinfogas ett element i trädet. Om uttrycket utvärderas till en typ av XAttributeinfogas ett attribut i trädet. Du kan bara infoga element och attribut i trädet där de är giltiga.

Det är viktigt att observera att endast ett enda uttryck kan gå in i ett inbäddat uttryck. Du kan inte bädda in flera instruktioner. Om ett uttryck sträcker sig bortom en enda rad måste du använda radfortsättningstecknet.

Om du använder ett inbäddat uttryck för att lägga till befintliga noder (inklusive element) och attribut i ett nytt XML-träd och om de befintliga noderna redan är överordnad klonas noderna. De nyligen klonade noderna är anslutna till det nya XML-trädet. Om de befintliga noderna inte är överordnad kopplas noderna helt enkelt till det nya XML-trädet. Det sista exemplet i den här artikeln visar detta.

Exempel: Använd ett inbäddat uttryck för att infoga ett element

I följande exempel används ett inbäddat uttryck för att infoga ett element i trädet:

xmlTree1 As XElement = _
    <Root>
        <Child>Contents</Child>
    </Root>
Dim xmlTree2 As XElement = _
    <Root>
        <%= xmlTree1.<Child> %>
    </Root>
Console.WriteLine(xmlTree2)

Det här exemplet genererar följande utdata:

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

Exempel: Använda ett inbäddat uttryck för innehåll

Du kan använda ett inbäddat uttryck för att ange innehållet i ett element:

Dim str As String
str = "Some content"
Dim root As XElement = <Root><%= str %></Root>
Console.WriteLine(root)

Det här exemplet genererar följande utdata:

<Root>Some content</Root>

Exempel: Använda en LINQ-fråga i ett inbäddat uttryck

Du kan använda resultatet av en LINQ-fråga för att ange innehållet i ett element:

Dim arr As Integer() = {1, 2, 3}

Dim n As XElement = _
    <Root>
        <%= From i In arr Select <Child><%= i %></Child> %>
    </Root>

Console.WriteLine(n)

Det här exemplet genererar följande utdata:

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

Exempel: Använd ett inbäddat uttryck för att ange nodnamn

Du kan också använda ett inbäddat uttryck för att beräkna attributnamn, attributvärden, elementnamn och elementvärden:

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)

Det här exemplet genererar följande utdata:

<Root att="aValue">
  <ele>eValue</ele>
</Root>

Exempel: Använd ett inbäddat uttryck för att klona och koppla noder

Som tidigare nämnts, om du använder ett inbäddat uttryck för att lägga till befintliga noder (inklusive element) och attribut till ett nytt XML-träd, och om noderna som läggs till noder redan är överordnad, klonas noderna och klonerna kopplas till det nya XML-trädet. Om de befintliga noderna inte är överordnade är de helt enkelt kopplade till det nya XML-trädet.

Följande kod visar beteendet när du lägger till ett överordnat element i ett träd och när du lägger till ett element utan överordnad i ett träd.

' 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"))

Det här exemplet genererar följande utdata:

Child1 was cloned
Child2 was attached

Se även