Будучи прагматичным, XDocument
против XmLDocument
- это не все или ничего (если вы не используете Silverlight) - поэтому, если XmlDoucument
делает то, что вам нужно, а XDocument
- нет, тогда, возможно, используйте XmlDocument
(с ImportNode
и т. Д.).
Тем не менее, даже с XDocument
вы можете предположительно использовать XNode.ReadFrom
для импорта каждого, а затем просто .Add
его в основную коллекцию.
Конечно, если файлы большие, XmlReader/XmlWriter
может быть более эффективным ... но более сложным. К счастью, XmlWriter
имеет метод WriteNode
, который принимает XmlReader
, поэтому вы можете перейти к первому дочернему элементу в XmlReader
и затем просто перенаправить его в выходной файл. Что-то вроде:
static void AppendChildren(this XmlWriter writer, string path)
{
using (XmlReader reader = XmlReader.Create(path))
{
reader.MoveToContent();
int targetDepth = reader.Depth + 1;
if(reader.Read()) {
while (reader.Depth == targetDepth)
{
writer.WriteNode(reader, true);
}
}
}
}