Si vous utilisez .NET version 3.0 ou inférieure, vous devez utiliser XmlDocument
alias l'API DOM classique. De même, vous constaterez qu'il existe d'autres API qui s'y attendront.
Si vous avez le choix, cependant, je recommanderais vivement d'utiliser XDocument
aka LINQ to XML. Il est beaucoup plus simple de créer des documents et de les traiter. Par exemple, c'est la différence entre:
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("root");
root.SetAttribute("name", "value");
XmlElement child = doc.CreateElement("child");
child.InnerText = "text node";
root.AppendChild(child);
doc.AppendChild(root);
et
XDocument doc = new XDocument(
new XElement("root",
new XAttribute("name", "value"),
new XElement("child", "text node")));
Les espaces de noms sont assez faciles à utiliser dans LINQ to XML, contrairement à toute autre API XML que j'ai jamais vue:
XNamespace ns = "http://somewhere.com";
XElement element = new XElement(ns + "elementName");
// etc
LINQ to XML fonctionne également très bien avec LINQ - son modèle de construction vous permet de créer des éléments avec des séquences de sous-éléments très facilement:
// Customers is a List<Customer>
XElement customersElement = new XElement("customers",
customers.Select(c => new XElement("customer",
new XAttribute("name", c.Name),
new XAttribute("lastSeen", c.LastOrder)
new XElement("address",
new XAttribute("town", c.Town),
new XAttribute("firstline", c.Address1),
// etc
));
C'est beaucoup plus déclaratif, ce qui correspond au style général LINQ.
Maintenant, comme Brannon l'a mentionné, il s'agit d'API en mémoire plutôt que de streaming (bien que XStreamingElement
prenant en charge la sortie paresseuse). XmlReader
et XmlWriter
sont les moyens normaux de streaming XML dans .NET, mais vous pouvez mélanger toutes les API dans une certaine mesure. Par exemple, vous pouvez diffuser un document volumineux mais utiliser LINQ to XML en positionnant un XmlReader
au début d'un élément, en le lisant XElement
et en le traitant, puis en passant à l'élément suivant, etc. Il existe divers articles de blog sur cette technique, voici celui que j'ai trouvé avec une recherche rapide .