2012-02-13 5 views
0

J'ai un document xml et je souhaite ajouter un autre xml en bas de celui-ci. En utilisant les classes xml dans .NET, quel est le moyen le plus rapide de le faire (en 3.5)?Ajouter un document xml au bas d'un document xml existant

Merci

+0

J'ai essayé un certain nombre de choses qui ont fonctionné avec des nœuds, etc., mais la suggestion de Jon (ci-dessous) est beaucoup plus lisible et évidente dans l'intention. – dotnetdev

Répondre

1

comme dans la plupart Quickest efficace ou plus rapide que dans le plus simple? Par exemple:

XDocument doc1 = XDocument.Load(...); 
XDocument doc2 = XDocument.Load(...); 

// Copy the root element of doc2 to the end of doc1 
doc1.Root.Add(doc2.Root); 
doc1.Save(...); 

Alternativement, vous pouvez voulez:

// Copy the *contents* of the root element of doc2 to the end of doc1 
doc1.Root.Add(doc2.Root.Descendants()); 

Si vous pouvez être plus précis sur vos besoins, nous pourrions être en mesure d'aider plus. Notez qu'un document XML ne peut avoir qu'un seul élément racine, donc vous ne pouvez pas mettre un document après l'autre.

+0

Je parlais d'efficacité, mais c'est une solution élégante. – dotnetdev

+0

@dotnetdev: Alors essayez cela, et voyez si c'est assez efficace pour ce que vous voulez faire. Ne commencez pas à écrire du code plus efficace mais moins lisible avant d'avoir testé la version simple. –

1

Je doute que vous serez en mesure de le faire en utilisant les classes XML. Les bibliothèques XML visent généralement à vous protéger de la création de fichiers XML mal formés, et la concaténation de deux documents XML sera mal formée car le nœud de document aura deux éléments enfants. Si les bibliothèques .Net vous permettent de le faire, je vous suggère de l'élever comme un bogue.

0
var xml = new XmlDocument(); 
xml.AppendChild(...); 
xml.PrependChild(...); 
0

Si vous vraiment voulez ajouter un deuxième noeud racine la plus rapide serait de lire la première ligne de fichiers en ligne et l'ajouter au second fichier. C'est une façon très sale et vous obtiendrez un fichier invalide!

System.IO.StreamWriter file1 = System.IO.File.AppendText(path); 
System.IO.StreamReader file2 = new System.IO.StreamReader(path2) 

while(!file2.EndOfStream) 
{ 
    file1.WriteLine(file2.ReadLine()); 
} 

file1.Close(); 
file2.Close(); 

Je n'aime même pas cette solution!

Questions connexes