Объединение XML-файлов в один с помощью C#: подробное руководство

Объединение XML-файлов — распространенная задача в различных сценариях разработки программного обеспечения. В этой статье блога мы рассмотрим несколько методов объединения XML-файлов в один файл с помощью C#. Каждый метод будет сопровождаться примером кода, иллюстрирующим реализацию. Давайте погрузимся!

Метод 1: Класс XmlDocument

using System;
using System.Xml;
public class XmlMerger
{
    public static void MergeXmlDocuments(string[] filePaths, string outputFilePath)
    {
        XmlDocument mergedXml = new XmlDocument();
        foreach (string filePath in filePaths)
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(filePath);
            XmlNode importedNode = mergedXml.ImportNode(xmlDocument.DocumentElement, true);
            mergedXml.DocumentElement.AppendChild(importedNode);
        }
        mergedXml.Save(outputFilePath);
    }
}

Метод 2: класс XDocument (LINQ to XML)

using System;
using System.Linq;
using System.Xml.Linq;
public class XmlMerger
{
    public static void MergeXmlDocuments(string[] filePaths, string outputFilePath)
    {
        XDocument mergedXml = new XDocument();
        foreach (string filePath in filePaths)
        {
            XDocument xmlDocument = XDocument.Load(filePath);
            mergedXml.Root.Add(xmlDocument.Root.Descendants());
        }
        mergedXml.Save(outputFilePath);
    }
}

Метод 3: класс XmlWriter

using System;
using System.Xml;
public class XmlMerger
{
    public static void MergeXmlDocuments(string[] filePaths, string outputFilePath)
    {
        using (XmlWriter writer = XmlWriter.Create(outputFilePath))
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("Root");
            foreach (string filePath in filePaths)
            {
                XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.Load(filePath);
                XmlNodeList nodes = xmlDocument.DocumentElement.ChildNodes;
                foreach (XmlNode node in nodes)
                {
                    node.WriteTo(writer);
                }
            }
            writer.WriteEndElement();
            writer.WriteEndDocument();
        }
    }
}

Метод 4: класс XmlSerializer

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
public class XmlMerger
{
    public static void MergeXmlDocuments(string[] filePaths, string outputFilePath)
    {
        List<object> mergedObjects = new List<object>();
        foreach (string filePath in filePaths)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<object>));
            using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
            {
                List<object> objects = (List<object>)serializer.Deserialize(fileStream);
                mergedObjects.AddRange(objects);
            }
        }
        XmlSerializer mergedSerializer = new XmlSerializer(typeof(List<object>));
        using (FileStream mergedFileStream = new FileStream(outputFilePath, FileMode.Create))
        {
            mergedSerializer.Serialize(mergedFileStream, mergedObjects);
        }
    }
}

В этой статье мы рассмотрели четыре различных метода объединения XML-файлов в один файл с помощью C#. Каждый метод имеет свои преимущества и может быть выбран в зависимости от конкретных требований. Используя класс XmlDocument, класс XDocument (LINQ to XML), класс XmlWriter или класс XmlSerializer, разработчики могут легко объединять XML-файлы для удовлетворения потребностей своих приложений.