我只是想合并2个xml文档(将节点从一个添加到另一个)。我做了一些谷歌搜索,并尝试了一些事情,但我总是得到相同的错误“要插入的节点来自不同的文档上下文”
我确信我错过了一些简单的东西,看起来这应该不会那么困难。
这是我的代码:
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)
答案 0 :(得分:2)
尝试将导入的节点附加到DocumentElement而不是行 Dim xmlSummarysNode490 As XmlNode = xmlDoc486(“Summarys”)。
xmlDoc490.DocumentElement.AppendChild(nodeDest)
您也可以在插入之前尝试使用 CloneNode()而不是 ImportNode()。
最后帮助我合并的东西是构建一个简单的容器xml,然后将子文档全部转储到其中。
xmlMerged.LoadXML("<set></set>")
所以它变成了:
<set>
<Summary>....</Summary>
<Summary>....</Summary>
...
</set>
答案 1 :(得分:2)
您可以创建辅助函数(甚至更好的扩展方法)来创建XML节点的副本,但将节点的关联文档更改为要合并到的文档。你也可以尝试使用反射,但这有点混乱......
答案 2 :(得分:1)
这是一种将2 xmls与同一模式合并的简单方法:
Dim x1 As New Dataset
x1.ReadXml(path1)
Dim x2 As New Dataset
x2.ReadXml(path2)
x1.Merge(x2)
x1.WriteXml(path3)
你可以根据自己的情况调整它。
答案 3 :(得分:0)
这很有效,除了我的愚蠢,愚蠢的错误
此:
Dim xmlSummarysNode490 As XmlNode = xmlDoc486("Summarys")
应该是这个:
Dim xmlSummarysNode490 As XmlNode = xmlDoc490("Summarys")
必须使用您要添加的文档添加元素/节点。