2012-02-13 3 views
0

У меня есть документ xml и вы хотите добавить еще один xml в его нижней части. Используя классы xml в .NET, каков самый быстрый способ сделать это (в 3.5)?Добавить XML-документ в нижнюю часть существующего xml-документа

Благодаря

+0

Я пробовал несколько вещей, которые работали с узлами и т. Д., Но предложение Джона (ниже) гораздо читаемо и очевидно в намерениях. – dotnetdev

ответ

1

Quickest как в наиболее эффективным, или самый быстрый, как в простейшей? Например:

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(...); 

В качестве альтернативы, вы можете хотите:

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

Если вы можете быть более точным о ваших требований, мы можем быть в состоянии помочь больше. Обратите внимание, что XML-документ может содержать только один корневой элемент, поэтому вы не можете просто поместить один документ за другим.

+0

Я имел в виду эффективность, но это изящное решение. – dotnetdev

+0

@dotnetdev: Попробуйте это, и посмотрите, достаточно ли это для того, что вы хотите сделать. Не начинайте писать более эффективный, но менее читаемый код, прежде чем протестировать простую версию. –

1

Я сомневаюсь, что вы сможете это сделать, используя классы XML. Библиотеки XML обычно направлены на то, чтобы защитить вас от создания плохо сформированного XML, и объединение двух XML-документов будет плохо сформировано, потому что узел документа будет иметь два дочерних элемента.

Если библиотеки .Net позволяют это сделать, я предлагаю вам поднять его как ошибку.

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

Если вы действительно хотите добавить второй корневой узел самый быстрый способ будет прочитать первую строку файла построчно и добавить его ко второму файлу. Это очень грязный способ, и вы получите недействительный файл xml!

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(); 

Мне даже не нравится это решение!

Смежные вопросы