J'apprends maintenant XMLDocument
mais je viens juste de tomber sur XDocument
et quand j'essaye de chercher la différence ou les bénéfices, je ne peux pas trouver quelque chose d'utile, pourriez-vous me dire Pourquoi utiliser l'un plutôt qu'un autre?
Réponses
Trop de publicités?Si vous êtes en utilisant .NET version 3.0 ou plus bas, vous avez à utiliser XmlDocument
aka le classique API DOM. De même, vous trouverez il ya quelques autres Api qui s'attendent à cela.
Si vous avez le choix, cependant, je tiens à fond recommandons l'utilisation d' XDocument
aka LINQ to XML. C'est beaucoup plus simple de créer des documents et des processus. 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 facile de travailler avec LINQ to XML, contrairement à tous les autres API XML que j'ai jamais vu:
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 permet de construire 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 tout un beaucoup plus déclaratif, qui s'intègre dans le cadre général de LINQ style.
Maintenant que Brannon mentionné, ce sont en mémoire Api plutôt que de streaming (bien qu' XStreamingElement
prend en charge paresseux de sortie). XmlReader
et XmlWriter
sont les méthodes normales de flux XML .NET, mais vous pouvez mélanger tous les Api pour certains mesure. Par exemple, vous pouvez diffuser un document volumineux, mais l'utilisation de LINQ to XML par le positionnement d'un XmlReader
au début de l'élément, de la lecture d'un XElement
, et de les traiter, puis de passer à l'élément suivant, etc. Il existe différents posts à ce sujet technique, voici un que j'ai trouvé avec une recherche rapide.
Je suis surpris qu'aucune des réponses à ce jour ne mentionne le fait que XmlDocument
ne fournit aucune information de ligne , tandis que XDocument
fait (via l'interface IXmlLineInfo
).
Cela peut être une caractéristique critique dans certains cas, et vous feriez mieux d'en être conscient avant de commencer à l'implémenter en utilisant XmlDocument
, pour découvrir plus tard que vous devez tout changer.
XmlDocument est idéal pour les développeurs qui sont familiarisés avec le modèle d’objet XML DOM. Il a été autour pendant un certain temps et correspond plus ou moins à la norme W3C. Il prend en charge la navigation manuelle ainsi que la sélection de nœuds XPath.
XDocument motorise le LINQ to fonctionnalité XML dans .NET 3.5. Il fait une utilisation intensive de IEnumerable et peut être plus facile à manipuler en droite c#.
Les deux modèles de document nécessitent vous permet de charger l’intégralité du document dans la mémoire (à la différence de XmlReader par exemple).
XDocument est à partir de l'API LINQ to XML, et XmlDocument est le standard DOM-style API for XML. Si vous connaissez DOM bien, et qui ne veulent pas apprendre LINQ to XML, aller avec XmlDocument. Si vous êtes nouveau à la fois, découvrez sur cette page qui compare les deux, et choisir celui que vous aimez le look de mieux.
J'ai juste commencé à l'aide de LINQ to XML, et j'aime la façon dont vous créez un document XML à l'aide de la fonctionnelle de la construction. C'est vraiment agréable. DOM est maladroit dans la comparaison.