Introduction au littéraux XML en Visual Basic
Mise à jour : November 2007
Cette section fournit des informations sur la création d'arborescences XML en Visual Basic.
Pour plus d'informations sur l'utilisation des résultats de requêtes LINQ comme contenu d'une arborescence XML, consultez Construction fonctionnelle (LINQ to XML).
Pour plus d'informations sur les littéraux XML en Visual Basic, consultez Vue d'ensemble de LINQ to XML dans Visual Basic.
Création d'arborescences XML
L'exemple suivant montre comment créer un objet XElement, dans le cas présent contacts :
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>
Création d'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>
Création d'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 />
Utilisation d'expressions incorporées
L'une des caractéristiques 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.
L'exemple suivant utilise une expression incorporée pour insérer un élément dans l'arborescence :
Dim 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>
Utilisation d'expressions incorporées 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>
Utilisation d'une requête LINQ dans une expression incorporée
Vous pouvez utiliser les résultats d'une requête LINQ pour 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>
Utilisation d'expressions incorporées pour 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>
Clonage et attachement
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 existants à une nouvelle arborescence XML et que les nœuds existants 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.
' Create a tree with a child element.
Dim xmlTree1 As XElement = _
<Root>
<Child1>1</Child1>
</Root>
' Create an element that is 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