Construction fonctionnelle (LINQ to XML)

LINQ to XML offre un moyen puissant de créer des éléments XML appelé construction fonctionnelle. La construction fonctionnelle vous permet de créer une arborescence XML en une seule instruction.

Plusieurs fonctionnalités clés de l’interface de programmation LINQ to XML sont utilisées dans la construction fonctionnelle :

  • Le constructeur XElement prend différents types d'arguments comme contenu. Par exemple, vous pouvez passer un autre objet XElement, qui devient un élément enfant. Vous pouvez passer un objet XAttribute, qui devient un attribut de l'élément. Ou vous pouvez passer tout autre type d'objet, qui est converti en chaîne et devient le contenu texte de l'élément.
  • Le constructeur XElement prend un tableau params de type Object, de sorte que vous puissiez passer toute quantité d'objets au constructeur. Cela vous permet de créer un élément dont le contenu est complexe.
  • Si un objet implémente IEnumerable<T>, la collection dans l'objet est énumérée et tous les éléments de la collection sont ajoutés. Si la collection contient des objets XElement ou XAttribute, chaque élément de la collection est ajouté séparément. Ceci est important, car cela vous permet de transmettre les résultats d’une requête LINQ au constructeur.

Exemple : Créer une arborescence XML

Vous pouvez utiliser la construction fonctionnelle pour écrire du code afin de créer une arborescence XML. Par exemple :

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144"),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );

Exemple : Créer une arborescence XML à partir de résultats de requêtes LINQ

Ces fonctionnalités permettent également d’écrire du code qui utilise les résultats de requêtes LINQ lorsque vous créez une arborescence XML, comme dans l’exemple suivant :

XElement srcTree = new XElement("Root",
    new XElement("Element", 1),
    new XElement("Element", 2),
    new XElement("Element", 3),
    new XElement("Element", 4),
    new XElement("Element", 5)
);
XElement xmlTree = new XElement("Root",
    new XElement("Child", 1),
    new XElement("Child", 2),
    from el in srcTree.Elements()
    where (int)el > 2
    select el
);
Console.WriteLine(xmlTree);

En Visual Basic, il est possible d’obtenir le même résultat avec des littéraux XML :

Dim srcTree As XElement = _
    <Root>
        <Element>1</Element>
        <Element>2</Element>
        <Element>3</Element>
        <Element>4</Element>
        <Element>5</Element>
    </Root>
Dim xmlTree As XElement = _
    <Root>
        <Child>1</Child>
        <Child>2</Child>
        <%= From el In srcTree.Elements() _
            Where CInt(el) > 2 _
            Select el %>
    </Root>
Console.WriteLine(xmlTree)

Cet exemple produit la sortie suivante :

<Root>
  <Child>1</Child>
  <Child>2</Child>
  <Element>3</Element>
  <Element>4</Element>
  <Element>5</Element>
</Root>

Voir aussi