LINQ to XML (anciennement XLINQ) est une technologie permettant de manipuler des fichiers XML plus simplement et plus intuitivement qu’en utilisant les techniques de C#2.0 et précédemment.
Commençons par créer le document XML en mémoire par un code C# :
XElement cars = new XElement(“cars”,
new XElement(“car”,
new XAttribute(“Immatriculation”, “1234AB33″),
new XElement(“Marque”, “Aston Martin”),
new XElement(“Modèle”, “Vantage V8 Coupé”),
new XElement(“Puissance”, “557cv”),
new XElement(“Prix”, “110.000,00€”)
),
new XElement(“car”,
new XAttribute(“Immatriculation”, “5678CD33″),
new XElement(“Marque”, “Aston Martin”),
new XElement(“Modèle”, “DB9 V12″),
new XElement(“Puissance”, “450cv”),
new XElement(“Prix”, “118.000,00€”)
),
new XElement(“car”,
new XAttribute(“Immatriculation”, “9012EF33″),
new XElement(“Marque”, “Ferrari”),
new XElement(“Modèle”, “F430 Scuderia”),
new XElement(“Puissance”, “510cv”),
new XElement(“Prix”, “207.900,00€”)
),
new XElement(“car”,
new XAttribute(“Immatriculation”, “3456GH33″),
new XElement(“Marque”, “Ferrari”),
new XElement(“Modèle”, “360 Modena”),
new XElement(“Puissance”, “400cv”),
new XElement(“Prix”, “138.000,00€”)
)
);
Les classes XDocument, XElement et XAttribute se trouvent dans le namespace : System.Xml.Linq. Utiliser ces classes est quand même plus simple que l’ancienne méthode et plus lisible surtout. Enfin il ne s’agit que de mon point de vue.
Passons maintenant à requête LINQ :
// Récupération de toutes les voitures dont la puissance est supérieure à 500cv
// Vous remarquerez l’utilisation de la méthode d’extention GetPower()
var search = from car in cars.Descendants(“car”) // Tous les éléments “car”
where car.Element(“Puissance”).Value.GetPower() > 500
select car.Attribute(“Immatriculation”).Value + ” est une ” +
car.Element(“Marque”).Value + ” “ +
car.Element(“Modèle”).Value + ” puissance “ +
car.Element(“Puissance”).Value + ” prix : “ +
car.Element(“Prix”).Value + “€”;
Si vous avez essayé l’exemple de code LINQ to Object, vous ne serez pas dépaysé par l’écriture de la requête. Donc ici je cherche dans tous les éléments “car” dont la puissance est supérieure à 500 cv. Pour cela, j’ai créé une méthode d’extention de la classe String, nommée GetPower. Voilà son implémentation :
public static class ExtendMethods
{
///
/// Méthode d’extention permettant de récupérer la puissance
/// d’une voiture à partir d’une chaîne de caractère
///
public static Int32 GetPower(this String entry)
{
String power = entry.Replace(“cv”, “”);
Int32 result;
if (Int32.TryParse(power, out result))
return result;
else
return 0;
}
}
Cette méthode d’extention, retire “cv” de la chaîne de caractère et fait une convertion en Int32.
Maintenant, on affiche le résultat :
foreach (var item in search)
Console.WriteLine(item);
Et voilà ce que l’on a dans la console :
1234AB33 est une Aston Martin Vantage V8 Coupé puissance 557cv prix : 110.000,00€
9012EF33 est une Ferrari F430 Scuderia puissance 510cv prix : 207.900,00€
Appuyez sur une touche pour continuer…
Lien MSDN : http://msdn2.microsoft.com/fr-fr/library/bb387098.aspx