त्रुटि: "डाला जाने वाला नोड एक अलग दस्तावेज़ संदर्भ से है"


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

V # कोड क्यों काम करता है जबकि C # नहीं करता है? क्या वीबी और सी # एक्सएमएल को संभालने के बीच अंतर हैं, जिनके बारे में मुझे पता होना चाहिए?

जवाबों:


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 में दो पाराम लगते हैं ... दूसरा एक डीपक्लोन के लिए है ... मैं कैसे तय कर सकता हूं कि मुझे यह सच है या गलत?
बोहण

7
@BDotA सच है अगर आप नोड और उसके सभी बच्चों को आयात करना चाहते हैं; झूठा अगर आप सिर्फ शीर्ष स्तर के नोड को आयात करना चाहते हैं।
रेक्स एम

1
@BDotA डिबग और यह पता लगाना कि कौन सी वस्तु अशक्त है
रेक्स एम

16
यदि OwnerDoccumentअशक्त है; ImportNode(..पर बुलाया जाना चाहिए oParent?
डॉग कान

9
... हाँ,oParent.ImportNode(oNode, true);
केसीडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.