使用C#合并两个XML文件不同节点并生成第三份文件的实现问题
C# 实现XML节点合并及头部日期替换方案
实现思路
- 基于.NET 自带的
System.Xml.Linq库实现,无需引入第三方依赖,兼容性好 - 遍历所有输入的XML文件,分别收集所有非空的
<cars>、<trucks>下的子节点,支持多文件批量合并 - 生成新的XML结构时直接替换原有header节点为用户输入的提交日期
完整实现代码
using System.Xml.Linq; public static void MergeXmlFiles(List<string> inputFilePaths, string outputFilePath, string submitDate) { // 存储收集到的所有car、truck子节点 List<XElement> allCarNodes = new List<XElement>(); List<XElement> allTruckNodes = new List<XElement>(); // 遍历所有输入文件提取有效节点 foreach (string filePath in inputFilePaths) { XDocument doc = XDocument.Load(filePath); XElement bodyNode = doc.Descendants("body").FirstOrDefault(); if (bodyNode == null) continue; // 提取cars下的所有非空子节点 XElement carsNode = bodyNode.Element("cars"); if (carsNode != null && carsNode.HasElements) { allCarNodes.AddRange(carsNode.Elements()); } // 提取trucks下的所有非空子节点 XElement trucksNode = bodyNode.Element("trucks"); if (trucksNode != null && trucksNode.HasElements) { allTruckNodes.AddRange(trucksNode.Elements()); } } // 构建新的XML文件 XDocument newDoc = new XDocument( new XDeclaration("1.0", "utf-8", null), new XElement("document", new XElement("header", new XElement("Date", submitDate) ), new XElement("body", new XElement("cars", allCarNodes), new XElement("trucks", allTruckNodes) ) ) ); // 保存文件,自动格式化缩进 newDoc.Save(outputFilePath, SaveOptions.None); }
使用示例
// 调用示例 List<string> inputFiles = new List<string> { @"C:\file1.xml", @"C:\file2.xml" }; string outputFile = @"C:\目标文件3.xml"; string submitDate = "03/02/2020"; // 你已实现的日期输入功能直接传入即可 MergeXmlFiles(inputFiles, outputFile, submitDate);
注意事项
- 如果实际业务中的节点名称不是
cars/trucks,直接替换代码中对应节点名称字符串即可 - 若XML带有命名空间,需要额外添加命名空间声明参数,可根据实际场景调整
- 输出时默认保留缩进格式,符合常规XML文件阅读要求
内容的提问来源于stack exchange,提问作者mhelv
相关产品推荐
相关产品推荐

