一尘不染

将XDocument转换为XmlDocument,反之亦然

c#

我有一个非常简单的问题。我使用XDocument生成XML文件。然后,我想将其作为XmlDocument类返回。我有一个XmlDocument变量,我需要将其转换回XDocument以附加更多节点。

那么,在XDocument和XmlDocument之间转换XML 的 最有效 方法是什么?(不使用文件中的任何临时存储。)


阅读 355

收藏
2020-05-19

共1个答案

一尘不染

您可以使用内置的xDocument.CreateReader()和XmlNodeReader来回转换。

将其放入扩展方法中,使其更易于使用。

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);
            }
        }
    }
}

资料来源:

2020-05-19