错误: “要插入的节点来自不同的文档上下文”

当我调用 XmlNode.AppendChild()时,我得到这个错误:

要插入的节点来自不同的文档上下文。

static public XmlNode XMLNewChildNode(XmlNode oParent, string sName,
string sNamespaceURI, string sNodeType)
{
XmlNode oNode = moDoc.CreateNode(sNodeType, sName, sNamespaceURI);
oParent.AppendChild(oNode);
return oNode;
}

这段代码是从 VB 6.0版本转换过来的(请忽略可选参数,我在 C # 版本中已经为它们重载了) :

Public Function XMLNewChildNode(ByVal oParent As IXMLDOMNode, ByVal _
sName As String, Optional ByVal sNamespaceURI As String = "", _
Optional ByVal sNodeType As String = "element") As IXMLDOMNode
'**************** DESCRIPTION *******************
'Create a new Child Node for passed Parent.
'***************** VARIABLES ********************
Dim oNode As IXMLDOMNode
'************************************************
Set oNode = moDoc.createNode(sNodeType, sName, sNamespaceURI)
Call oParent.appendChild(oNode)
Set XMLNewChildNode = oNode
End Function

为什么 VB 代码可以工作,而 C # 却不能?VB 和 C # 处理 XML 的方式有什么不同吗?

93009 次浏览

在添加节点之前,您需要将该节点导入到文档中:

XmlNode oNode = moDoc.CreateNode(sNodeType, sName, sNamespaceURI);


//necessary for crossing XmlDocument contexts
XmlNode importNode = oParent.OwnerDocument.ImportNode(oNode, true);


oParent.AppendChild(importNode);
return oNode;