Как я могу скопировать XmlNode из одного XmlDocument в другой? - PullRequest
4 голосов
/ 12 марта 2010

Я создаю инструмент, который создает / редактирует файлы XML, и я хочу иметь возможность заполнять его фрагментами шаблона, определенными в другом файле XML.

Например, в инструменте есть кнопка «Добавить элемент FooBarBaz», которая добавляет элемент в создаваемый новый документ, и я хочу добавить FooBarBaz, скопировав его из шаблона.

Или, допустим, это мой файл шаблона:

<Templates>
    <FooBarBaz Attribute="Value">
        <ChildElement/>
    </FooBarBaz>
</Templates>

Затем я могу получить фрагмент шаблона с помощью .GetElementsByTagName ("FooBarBaz"), и я хотел бы иметь возможность вставить его в новый документ с помощью чего-то вроде .AppendChild (templateNode).

Но проблема в том, что XmlNode нельзя скопировать из одного XmlDocument в другой, даже если вы используете .Clone () или .CloneNode (), потому что AppendChild () выдает исключение, говорящее, что элемент шаблона принадлежит другому контексту.

Есть ли простой способ скопировать System.Xml.XmlNode между System.Xml.XmlDocuments?

Ответы [ 2 ]

7 голосов
/ 12 марта 2010

Взгляните на XmlDocument.ImportNode .

3 голосов
/ 12 марта 2010

Проверьте метод ImportNode :

var myNewDoc = new XmlDocument();
myNewDoc.ImportNode(xmlNode, true);
...