Vue d'ensemble de LINQ to XML
Mise à jour : November 2007
Le langage XML a été largement adopté comme méthode pour mettre en forme des données dans de nombreux contextes. Par exemple, on trouve du code XML sur le Web, dans les fichiers de configuration, dans les fichiers Microsoft Office Word et dans les bases de données.
LINQ to XML est une approche à jour et repensée de la programmation avec XML. Elle propose les fonctionnalités de modification des documents en mémoire du modèle DOM (Document Objet Model) et prend en charge les expressions de requête LINQ. Bien que ces expressions de requête soient syntaxiquement différentes de XPath, elles procurent la même fonctionnalité.
Développeurs LINQ to XML
LINQ to XML cible un large éventail de développeurs. Pour un développeur qui souhaite simplement se faciliter la tâche, LINQ to XML rend le XML plus abordable en fournissant une expérience de requête semblable à SQL. Un rapide apprentissage permettra aux programmeurs d'écrire des requêtes succinctes et puissantes dans le langage de programmation de leur choix.
Les développeurs professionnels peuvent utiliser LINQ to XML pour accroître considérablement leur productivité. Avec LINQ to XML, ils peuvent écrire moins de code qui est plus expressif, plus compact et plus puissant. Ils peuvent utiliser simultanément des expressions de requête de plusieurs domaines de données.
Qu'est-ce que LINQ to XML ?
LINQ to XML est une interface de programmation XML en mémoire compatible avec LINQ qui vous permet de travailler avec du code XML dans les langages de programmation .NET Framework.
LINQ to XML s'apparente au modèle DOM, dans le sens où elle place le document XML en mémoire. Vous pouvez interroger et modifier le document, et après l'avoir modifié, vous pouvez l'enregistrer dans un fichier ou le sérialiser et l'envoyer via Internet. Toutefois, l'interface LINQ to XML diffère du modèle DOM : elle procure un nouveau modèle objet qui est plus léger et plus facile à manipuler, et qui tire parti des améliorations de langage dans Visual C# 2008.
Le principal avantage de LINQ to XML est son intégration avec LINQ (Language Integrated Query). Cette intégration vous permet d'écrire des requêtes sur le document XML en mémoire afin de récupérer des collections d'éléments et d'attributs. La capacité de requête de LINQ to XML est comparable en terme de fonctionnalités (mais pas en termes de syntaxe) à XQuery et XPath. L'intégration de LINQ dans Visual C# 2008 fournit un typage plus fort, une vérification au moment de la compilation et une prise en charge de débogage améliorée.
LINQ to XML présente également l'avantage de pouvoir utiliser des résultats de requête en tant que paramètres de constructeurs d'objets XElement et XAttribute, ce qui constitue une approche puissante pour la création d'arborescences XML. Cette approche, appelée construction fonctionnelle, permet aux développeurs de transformer facilement des arborescences XML d'une forme à une autre.
Par exemple, vous pourriez avoir une commande fournisseur XML ordinaire comme décrit dans Exemple de fichier XML : Commande fournisseur typique (LINQ to XML). En utilisant LINQ to XML, vous pourriez exécuter la requête suivante afin d'obtenir la valeur d'attribut de numéro de référence pour chaque élément de la commande fournisseur :
IEnumerable<string> partNos =
from item in purchaseOrder.Descendants("Item")
select (string) item.Attribute("PartNumber");
Dans Visual Basic, la même requête peut être écrite comme suit :
Dim partNos = _
From item In purchaseOrder...<Item> _
Select item.@PartNumber
Vous pourriez également, si vous le souhaitez, générer une liste des éléments avec une valeur supérieure à $ 100, triés par numéro de référence. Pour obtenir ces informations, vous pourriez exécuter la requête suivante :
IEnumerable<XElement> partNos =
from item in purchaseOrder.Descendants("Item")
where (int) item.Element("Quantity") *
(decimal) item.Element("USPrice") > 100
orderby (string)item.Element("PartNumber")
select item;
Dans Visual Basic, la même requête peut être écrite comme suit :
Dim partNos = _
From item In purchaseOrder...<Item> _
Where (item.<Quantity>.Value * _
item.<USPrice>.Value) > 100 _
Order By item.<PartNumber>.Value _
Select item
Outre ces capacités LINQ, LINQ to XML fournit une interface de programmation XML améliorée. Grâce à LINQ to XML, vous pouvez :
charger du code XML à partir de fichiers ou de flux ;
sérialiser du code XML vers des fichiers ou des flux ;
créer du code XML à partir de zéro à l'aide de la construction fonctionnelle ;
interroger du code XML à l'aide d'axes de type XPath ;
manipuler l'arborescence XML en mémoire à l'aide de méthodes telles que Add, Remove, ReplaceWith et SetValue ;
valider des arborescences XML à l'aide de XSD ;
utiliser une combinaison de ces fonctionnalités pour transformer des arborescences XML d'une forme à une autre.
Création d'arborescences XML
L'un des principaux avantages liés à la programmation avec LINQ to XML tient à la facilité de création d'arborescences XML. Par exemple, pour créer une petite arborescence XML, vous pouvez écrire du code C# comme suit :
XElement contacts =
new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144",
new XAttribute("Type", "Home")),
new XElement("phone", "425-555-0145",
new XAttribute("Type", "Work")),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
)
);
En Visual Basic, le code pour construire l'arborescence XML est encore plus simple car il utilise un littéral XML :
Dim contacts = _
<Contacts>
<Contact>
<Name>Patrick Hines</Name>
<Phone Type="Home">206-555-0144</Phone>
<Phone Type="Work">425-555-0145</Phone>
<Address>
<Street1>123 Main St</Street1>
<City>Mercer Island</City>
<State>WA</State>
<Postal>68042</Postal>
</Address>
</Contact>
</Contacts>
Le compilateur Visual Basic traduit les littéraux XML en appels de méthode LINQ to XML.
Pour plus d'informations, consultez Création d'arborescences XML.
Voir aussi
Concepts
Vue d'ensemble de LINQ to XML dans Visual Basic