551 votes

XDocument ou XMLDocument

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?

532voto

Jon Skeet Points 692016

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.

64voto

Julien Guertault Points 549

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.

40voto

Brannon Points 12633

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).

25voto

Daniel Chambers Points 786

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.

14voto

w0land Points 51

En outre, Notez que est pris en charge dans la Xbox 360 et Windows Phone OS 7.0. Si vous ciblez eux, développer pour ou migrer de `` .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X