Преобразование XDocument к XmlDocument и наоборот

Я думаю, что лучшая вещь сделать, учат достаточно другого языка так, чтобы можно было переписать вручную, существуют некоторые довольно трудные различия в определенных аспектах, что я не уверен, что преобразователь обработал бы очень хорошо. Например, сравните мой перевод от C# до VB следующего:

public class FileSystemEventSubscription : EventSubscription
{
    private FileSystemWatcher fileSystemWatcher;

    public FileSystemEventSubscription(IComparable queueName, 
        Guid workflowInstanceId, FileSystemWatcher fileSystemWatcher) : base(queueName, workflowInstanceId)
    {
        this.fileSystemWatcher = fileSystemWatcher;
    }

становится

Public Class FileSystemEventSubscription
    Inherits EventSubscription  
    Private myFileSystemWatcher As FileSystemWatcher
    Public Sub New(ByVal QueueName As IComparable, ByVal WorkflowInstanceID As Guid, ByVal Watcher As FileSystemWatcher)
        MyBase.New(QueueName, WorkflowInstanceID)
        Me.myFileSystemWatcher = Watcher
    End Sub

, C# от Пользовательского образца Платформы Действия, и я боюсь, что потерял ссылку на него. Но это содержит некоторое противно выглядящее наследование (с точки зрения VB).

187
задан Wim ten Brink 1 October 2009 в 22:29
поделиться

3 ответа

Вы можете использовать встроенный 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);
            }
        }
    }
}

Источники:

299
ответ дан 23 November 2019 в 05:46
поделиться

Вы можете попробовать записать XDocument в XmlWriter, передаваемый в XmlReader для XmlDocument.

Если я правильно понимаю концепции, прямое преобразование невозможно (внутренняя структура отличается / упрощено с помощью XDocument). Но тогда я могу ошибаться ...

4
ответ дан 23 November 2019 в 05:46
поделиться

Обсуждение http://blogs.msdn.com/marcelolr/archive/2009/03/13/fast-way-to-convert-xmldocument-into-xdocument.aspx

Это кажется, что чтение XDocument через XmlNodeReader - самый быстрый метод. См. Подробности в блоге.

4
ответ дан 23 November 2019 в 05:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: