2009-03-26 14 views
1

J'essaie simplement de fusionner deux documents XML (en ajoutant des nœuds de l'un à l'autre). J'ai fait quelques recherches sur Google, et j'ai essayé quelques choses, mais j'ai toujours la même erreur "Le noeud à insérer provient d'un contexte de document différent"VB.NET insertion de nœuds xml dans un document XML existant

Je suis sûr qu'il me manque quelque chose de simple, juste semble que cela ne devrait pas être si difficile.

Voici mon code:

Dim xmlDoc482 As XmlDocument = New XmlDocument 
    Dim xmlDoc486 As XmlDocument = New XmlDocument 
    Dim xmlDoc490 As XmlDocument = New XmlDocument 

    xmlDoc482.LoadXml(strSettlement482) 
    xmlDoc486.LoadXml(strSettlement486) 
    xmlDoc490.LoadXml(strSettlement490) 

    Dim xmlSummarysNode490 As XmlNode = xmlDoc486("Summarys") 
    Dim xmlSummaryNode482 As XmlNode = xmlDoc482("Summarys").LastChild 
    Dim xmlSummaryNode486 As XmlNode = xmlDoc486("Summarys").LastChild 

    Dim nodeDest As XmlNode 
    nodeDest = xmlDoc490.ImportNode(xmlSummaryNode482, True) 
    xmlSummarysNode490.AppendChild(nodeDest) 

    nodeDest = xmlDoc490.ImportNode(xmlSummaryNode486, True) 
    xmlSummarysNode490.AppendChild(nodeDest) 
+1

FWIW à ce stade tardif, le pluriel de résumé est des résumés. –

Répondre

0

Cela fonctionne très bien, autre que ma faute de frappe stupide, stupide

Ce:

Dim xmlSummarysNode490 As XmlNode = xmlDoc486("Summarys") 

Ce devrait être:

Dim xmlSummarysNode490 As XmlNode = xmlDoc490("Summarys") 

Un élément/noeud doit être ajouté en utilisant le document auquel vous l'ajoutez.

2

Essayez les annexant noeuds importés au DocumentElement au lieu de la ligne Dim xmlSummarysNode490 Comme XmlNode = xmlDoc486 ("Summarys").

xmlDoc490.DocumentElement.AppendChild(nodeDest) 

Vous pouvez également essayer d'utiliser la CloneNode() au lieu de ImportNode() avant l'insertion.

Enfin quelque chose qui m'a aidé à fusionner dans le passé était de construire un simple conteneur xml puis de vider les documents enfants.

xmlMerged.LoadXML("<set></set>") 

Il devient:

<set> 
<Summary>....</Summary> 
<Summary>....</Summary> 
... 
</set> 
2

Vous pouvez créer une fonction d'aide (ou mieux encore, une méthode d'extension) pour créer une copie du noeud XML, mais modifie le document associé du nœud au document vous voulez fusionner. Vous pouvez également essayer d'utiliser la réflexion, mais ce genre de désordre obtient ...

1

Voici un moyen facile de fusionner 2 xmls avec le même schéma:

Dim x1 As New Dataset 
x1.ReadXml(path1) 
Dim x2 As New Dataset 
x2.ReadXml(path2) 

x1.Merge(x2) 
x1.WriteXml(path3) 

Vous pouvez probablement l'adapter à votre propre situation.

Questions connexes