1. ホーム
  2. c#

[解決済み] XDocumentとXmlDocumentの相互変換

2022-04-20 10:29:35

質問

とても簡単な問題なのですが。私はXDocumentを使用してXMLファイルを生成しています。そして、それを XmlDocument クラスとして返したいと思っています。 そして、XmlDocument 変数があるので、これを XDocument に戻してノードを追加する必要があります。

では、どのような 最も効率的な XDocument と XmlDocument の間で XML を変換する方法は?(ファイルへの一時的な保存を一切使用せずに)。

どのように解決するのですか?

内蔵のxDocument.CreateReader()とXmlNodeReaderを使って、前後変換が可能です。

それをExtensionメソッドに入れることで、より簡単に作業できるようになります。

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

ソースはこちら