2010-06-10 9 views
87

XmlNode.AppendChild() aradığımda, bu hatayı alıyorum:Hata: "Eklenecek düğüm farklı bir belge içeriğinden"

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

Bu kod onun VB 6.0 sürümünden dönüştürülmüş (lütfen isteğe bağlı parametreleri dikkate almayın, C# sürümünde aşırı yüklenmeler var) :

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 kodu neden C# çalışmıyorken çalışıyor? VB ve C# XML'in nasıl işleyeceğiyle, bilmem gereken şeyler arasında fark var mı?

cevap

164

Bunu eklemeden önce belgeye düğümü ithal etmek gerekir:

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

Teşekkür Sir! ImportNode iki param ... alır, ikincisi de derinlemesine ... Cümle ... Doğru ya da Yanlış'ı geçip geçmemeye nasıl karar verebilirim? Düğümü ve tüm çocuklarını içe aktarmak istiyorsanız – Bohn

+7

@BDotA doğru; Yalnızca en üst düzey düğümü içe aktarmak istiyorsanız false. –

+0

Teşekkürler ... Hem true hem de false denedim ve ImportNode satırında Null Ref Exception alıyorum ... XML kodlarımda hala bir şey var mı? ya da bu geçmekte olduğum verilerle ilgili? – Bohn

İlgili konular