197 votes

Conversion de XDocument à XmlDocument et vice versa

C’est un problème très simple que j’ai. J’utilise XDocument pour générer un fichier XML. Je veux ensuite Retournez-le comme une classe XmlDocument. Et j’ai une variable XmlDocument dont j’ai besoin pour reconvertir XDocument pour ajouter d’autres nœuds.

Alors, quel est la méthode la plus efficace pour convertir XML entre XDocument et XmlDocument ? (Sans utiliser tout stockage temporaire dans un fichier).

324voto

Mark Coleman Points 24469

Vous pouvez utiliser le construit en xDocument.CreateReader() et un XmlNodeReader pour convertir en arrière et en avant.

Le mettre dans une méthode d'Extension pour le rendre plus facile de travailler avec.

using System;
using System.Xml;
using System.Xml.Linq;

namespace MyTest
{
    internal class Program
    {
        private static void Main(string[] args)
        {

            var xmlDocument = new XmlDocument();
            xmlDocument.LoadXml("<Root><Child>Test</Child></Root>");

            var xDocument = xmlDocument.ToXDocument();
            var newXmlDocument = xDocument.ToXmlDocument();
            Console.ReadLine();
        }
    }

    public static class DocumentExtensions
    {
        public static XmlDocument ToXmlDocument(this XDocument xDocument)
        {
            var xmlDocument = new XmlDocument();
            using(var xmlReader = xDocument.CreateReader())
            {
                xmlDocument.Load(xmlReader);
            }
            return xmlDocument;
        }

        public static XDocument ToXDocument(this XmlDocument xmlDocument)
        {
            using (var nodeReader = new XmlNodeReader(xmlDocument))
            {
                nodeReader.MoveToContent();
                return XDocument.Load(nodeReader);
            }
        }
    }
}

Sources:

31voto

Abhishek Gupta Points 2115

Pour moi cette solution unique ligne fonctionne très bien

7voto

Robert Harvey Points 103562
<pre><code></code><p>Utilisation de cette extension sont que fait simplement en utilisant quelque chose comme ça</p><pre><code></code></pre></pre>

4voto

Daren Thomas Points 26812

Vous pouvez essayer d’écrire l’objet XDocument dans un objet XmlWriter canalisé vers un XmlReader pour un objet XmlDocument.

Si je comprends bien les concepts, une conversion directe n’est pas possible (la structure interne est différent / simplifiée avec XDocument). Mais alors, je peux me tromper...

4voto

paul Points 4903

Il y a une discussion sur http://blogs.msdn.com/marcelolr/archive/2009/03/13/fast-way-to-convert-xmldocument-into-xdocument.aspx

Il semble que la lecture d’un objet XDocument via un objet XmlNodeReader est la méthode la plus rapide. Voir le blog pour plus de détails.

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