Partage via


Littéraux XML en Visual Basic (LINQ to XML)

Cet article fournit des informations sur la création d’arborescences XML dans Visual Basic à l’aide de littéraux XML et d’expressions incorporées.

Exemple : Utiliser des littéraux XML pour créer une arborescence XML

L’exemple suivant montre comment créer un XElement, dans ce cas contacts, avec un littéral 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>

Exemple : Utiliser des littéraux XML pour créer un XElement avec du contenu simple

Vous pouvez créer un objet XElement qui contient du contenu simple, comme suit :

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

Cet exemple produit la sortie suivante :

<Customer>Adventure Works</Customer>

Exemple : Utiliser un littéral XML pour créer un élément vide

Vous pouvez créer un objet XElement vide comme suit :

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

Cet exemple produit la sortie suivante :

<Customer />

Utiliser des expressions incorporées pour créer du contenu

L’une des fonctionnalités importantes des littéraux XML est qu’ils autorisent la présence d’expressions incorporées. Les expressions incorporées vous permettent d’évaluer une expression et d’insérer les résultats de l’expression dans l’arborescence XML. Si l'expression est évaluée à un type de XElement, un élément est inséré dans l'arborescence. Si l’expression est évaluée à un type de XAttribute, un attribut est inséré dans l’arborescence. Vous pouvez insérer des éléments et des attributs dans l'arborescence uniquement où ils sont valides.

Il est important de noter que seule une expression unique peut aller dans une expression incorporée. Vous ne pouvez pas incorporer plusieurs instructions. Si une expression s'étend au-delà d'une seule ligne, vous devez utiliser le caractère de continuation de ligne.

Si vous utilisez une expression incorporée pour ajouter des nœuds (y compris des éléments) et des attributs existants à une nouvelle arborescence XML et si les nœuds existants sont déjà apparentés, les nœuds sont clonés. Les nœuds nouvellement clonés sont attachés à la nouvelle arborescence XML. Si les nœuds existants ne sont pas apparentés, ils sont simplement attachés à la nouvelle arborescence XML. Ceci est illustré dans le dernier exemple de cette rubrique.

Exemple : Utiliser une expression incorporée pour insérer un élément

L’exemple suivant utilise une expression incorporée pour insérer un élément dans l’arborescence :

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

Cet exemple produit la sortie suivante :

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

Exemple : Utiliser une expression incorporée pour le contenu

Vous pouvez utiliser une expression incorporée pour fournir le contenu d'un élément :

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

Cet exemple produit la sortie suivante :

<Root>Some content</Root>

Exemple : Utiliser une requête LINQ dans une expression incorporée

Vous pouvez utiliser les résultats d'une requête LINQ pour fournir le contenu d'un élément :

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

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

Console.WriteLine(n)

Cet exemple produit la sortie suivante :

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

Exemple : Utiliser une expression incorporée pour fournir des noms de nœuds

Vous pouvez également utiliser des expressions incorporées pour calculer des noms d'attributs, des valeurs d'attributs, des noms d'éléments et des valeurs d'éléments :

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)

Cet exemple produit la sortie suivante :

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

Exemple : Utiliser une expression incorporée pour cloner et attacher des nœuds

Comme mentionné précédemment, si vous utilisez une expression incorporée pour ajouter des nœuds (y compris des éléments) et des attributs à une nouvelle arborescence XML et que les nœuds ajoutés sont déjà apparentés, les nœuds sont clonés et les nœuds nouvellement clonés sont attachés à la nouvelle arborescence XML. Si les nœuds existants ne sont pas apparentés, ils sont simplement attachés à la nouvelle arborescence XML.

Le code suivant illustre le comportement lorsque vous ajoutez un élément apparenté à une arborescence et lorsque vous ajoutez un élément non apparenté à une arborescence.

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

Cet exemple produit la sortie suivante :

Child1 was cloned
Child2 was attached

Voir aussi