오류 : "삽입 할 노드가 다른 문서 컨텍스트에 있습니다."


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을 처리하는 방식에 차이가 있습니까?

답변:


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를 전달해야하는지 어떻게 결정할 수 있습니까?
Bohn

7
@BDotA 노드와 모든 자식을 가져 오려면 true입니다. 최상위 노드 만 가져 오려면 false입니다.
Rex M

1
@BDotA 디버그 및 어떤 개체가 null인지 파악
Rex M

16
OwnerDoccumentnull 인 경우 ; ImportNode(..에 호출해야 oParent합니까?
Dog Ears

9
... 네,oParent.ImportNode(oNode, true);
KCD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.