У меня есть документ xml и вы хотите добавить еще один xml в его нижней части. Используя классы xml в .NET, каков самый быстрый способ сделать это (в 3.5)?Добавить XML-документ в нижнюю часть существующего xml-документа
Благодаря
У меня есть документ xml и вы хотите добавить еще один xml в его нижней части. Используя классы xml в .NET, каков самый быстрый способ сделать это (в 3.5)?Добавить XML-документ в нижнюю часть существующего xml-документа
Благодаря
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-документ может содержать только один корневой элемент, поэтому вы не можете просто поместить один документ за другим.
Я имел в виду эффективность, но это изящное решение. – dotnetdev
@dotnetdev: Попробуйте это, и посмотрите, достаточно ли это для того, что вы хотите сделать. Не начинайте писать более эффективный, но менее читаемый код, прежде чем протестировать простую версию. –
Я сомневаюсь, что вы сможете это сделать, используя классы XML. Библиотеки XML обычно направлены на то, чтобы защитить вас от создания плохо сформированного XML, и объединение двух XML-документов будет плохо сформировано, потому что узел документа будет иметь два дочерних элемента.
Если библиотеки .Net позволяют это сделать, я предлагаю вам поднять его как ошибку.
var xml = new XmlDocument();
xml.AppendChild(...);
xml.PrependChild(...);
Если вы действительно хотите добавить второй корневой узел самый быстрый способ будет прочитать первую строку файла построчно и добавить его ко второму файлу. Это очень грязный способ, и вы получите недействительный файл 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();
Мне даже не нравится это решение!
Я пробовал несколько вещей, которые работали с узлами и т. Д., Но предложение Джона (ниже) гораздо читаемо и очевидно в намерениях. – dotnetdev