Erreur: “Le noeud à insérer provient d’un contexte de document différent”

Lorsque XmlNode.AppendChild() , j’obtiens cette erreur:

Le noeud à insérer provient d’un contexte de document différent.

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

Ce code a été converti à partir de sa version 6.0 de VB qui était ceci (veuillez ignorer les parameters facultatifs, j’ai des surcharges pour eux dans la version C #):

 Public Function XMLNewChildNode(ByVal oParent As IXMLDOMNode, ByVal _ sName As Ssortingng, Optional ByVal sNamespaceURI As Ssortingng = "", _ Optional ByVal sNodeType As Ssortingng = "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 

Pourquoi le code VB fonctionne-t-il alors que le code C # ne fonctionne pas? Y a-t-il des différences entre la manière dont VB et C # traitent le XML, dont je dois être conscient?

Vous devez importer le noeud dans le document avant de l’append:

 XmlNode oNode = moDoc.CreateNode(sNodeType, sName, sNamespaceURI); //necessary for crossing XmlDocument contexts XmlNode importNode = oParent.OwnerDocument.ImportNode(oNode, true); oParent.AppendChild(importNode); return oNode;