VB.NET вставка узлов XML в существующий документ XML - PullRequest
1 голос
/ 26 марта 2009

Я просто пытаюсь объединить 2 XML-документа (добавляя узлы из одного в другой). Я провел поиск в Google и попробовал несколько вещей, но всегда получаю одну и ту же ошибку «Узел, который нужно вставить, находится в другом контексте документа»

Я уверен, что упускаю что-то простое, просто кажется, что это не должно быть так сложно.

Вот мой код:

    Dim xmlDoc482 As XmlDocument = New XmlDocument
    Dim xmlDoc486 As XmlDocument = New XmlDocument
    Dim xmlDoc490 As XmlDocument = New XmlDocument

    xmlDoc482.LoadXml(strSettlement482)
    xmlDoc486.LoadXml(strSettlement486)
    xmlDoc490.LoadXml(strSettlement490)

    Dim xmlSummarysNode490 As XmlNode = xmlDoc486("Summarys")
    Dim xmlSummaryNode482 As XmlNode = xmlDoc482("Summarys").LastChild
    Dim xmlSummaryNode486 As XmlNode = xmlDoc486("Summarys").LastChild

    Dim nodeDest As XmlNode
    nodeDest = xmlDoc490.ImportNode(xmlSummaryNode482, True)
    xmlSummarysNode490.AppendChild(nodeDest)

    nodeDest = xmlDoc490.ImportNode(xmlSummaryNode486, True)
    xmlSummarysNode490.AppendChild(nodeDest)

Ответы [ 4 ]

2 голосов
/ 26 марта 2009

Вы можете создать вспомогательную функцию (или, что еще лучше, метод расширения), чтобы создать копию узла XML, но изменить связанный с узлом документ на документ, с которым вы хотите объединиться. Вы также можете попробовать использовать рефлексию, но это становится немного грязно ...

2 голосов
/ 26 марта 2009

Попробуйте добавить импортированные узлы в DocumentElement вместо строки Dim xmlSummarysNode490 As XmlNode = xmlDoc486 («Сводка»).

xmlDoc490.DocumentElement.AppendChild(nodeDest)

Вы также можете попробовать использовать CloneNode () вместо ImportNode () перед вставкой.

Наконец, что-то, что помогло мне слиться в прошлом, заключалось в создании простого XML-контейнера и последующем сбрасывании в него дочерних документов.

xmlMerged.LoadXML("<set></set>")

Так становится:

<set>
 <Summary>....</Summary>
 <Summary>....</Summary>
 ...
</set>
1 голос
/ 03 апреля 2009

Вот простой способ объединить 2 xmls с одной и той же схемой:

Dim x1 As New Dataset
x1.ReadXml(path1)
Dim x2 As New Dataset
x2.ReadXml(path2)

x1.Merge(x2)
x1.WriteXml(path3)

Вы, вероятно, можете адаптировать его к своей ситуации.

0 голосов
/ 26 марта 2009

Это прекрасно работает, кроме моей глупой, глупой опечатки

Это:

Dim xmlSummarysNode490 As XmlNode = xmlDoc486("Summarys")

Должно быть так:

Dim xmlSummarysNode490 As XmlNode = xmlDoc490("Summarys")

Элемент / узел должен быть добавлен с использованием документа, к которому вы его добавляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...