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


109

当我打电话时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的方式之间有区别吗?

Answers:


202

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

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

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

oParent.AppendChild(importNode);
return oNode;

1
谢谢先生!ImportNode具有两个参数...第二个参数用于deepClone ...如何确定应将True还是False传递给它?
博恩2010年

7
@BDotA如果要导入节点及其所有子节点,则为true;否则为false。如果只想导入顶级节点,则为false。
Rex M 2010年

1
@BDotA调试并找出哪个对象为空
Rex M 2010年

16
如果OwnerDoccument为null;ImportNode(..应该被调用oParent吗?
狗耳

9
...是,oParent.ImportNode(oNode, true);
KCD 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.