Partager via


Les littéraux XML dans 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 objet XElement, dans le cas présent contacts, avec des littéraux 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 XElement contenant un contenu simple, comme suit :

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

Cet exemple génère 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 vide XElement, comme suit :

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

Cet exemple génère la sortie suivante :

<Customer />

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

Une fonctionnalité importante des littéraux XML est qu’ils autorisent les 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 seule expression peut entrer dans une expression incorporée. Vous ne pouvez pas imbriquer plusieurs déclarations. 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 existants (y compris des éléments) et des attributs à une nouvelle arborescence XML et si les nœuds existants sont déjà parenté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 parentés, les nœuds sont simplement attachés à la nouvelle arborescence XML. Le dernier exemple de cet article illustre cela.

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 génère 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 génère 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 génère 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 une expression incorporée pour calculer les noms d’attributs, les valeurs d’attribut, les noms d’éléments et les valeurs d’élément :

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 génère 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 existants (y compris des éléments) et des attributs à une nouvelle arborescence XML, et si les nœuds ajoutés sont déjà parentés, les nœuds sont clonés et les clones sont attachés à la nouvelle arborescence XML. Si les nœuds existants ne sont pas parentés, ils sont simplement attachés à la nouvelle arborescence XML.

Le code suivant illustre le comportement lorsque vous ajoutez un élément parenté à une arborescence et lorsque vous ajoutez un élément sans parent à 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 génère la sortie suivante :

Child1 was cloned
Child2 was attached

Voir aussi