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 est la capacité à créer une arborescence XML en une seule instruction.
Plusieurs fonctionnalités clés de l'interface de programmation LINQ to XML autorisent 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 passer les résultats d'une requête LINQ au constructeur.
Ces fonctionnalités vous permettent d'écrire du code pour créer une arborescence XML. Voici un 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")
)
)
);
Ces fonctionnalités vous permettent également d'écrire du code qui utilise les résultats de requêtes LINQ lorsque vous créez une arborescence XML, comme suit :
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, la même chose est accomplie par le biais de 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 génère la sortie suivante :
<Root>
<Child>1</Child>
<Child>2</Child>
<Element>3</Element>
<Element>4</Element>
<Element>5</Element>
</Root>