You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用C#读取两个XML文件并将旧文件值迁移至新文件

用C#实现旧XML值迁移到新XML的解决方案

嘿,我来帮你搞定这个XML数据迁移的需求!其实用C#的LINQ to XML(也就是System.Xml.Linq命名空间下的API)就能轻松解决,它处理XML节点的匹配和更新非常直观。

核心思路

我们要做的就是:

  • 加载两个XML文件到内存中
  • 把旧XML里的resource节点按id做一个映射字典,方便快速查找对应的值
  • 遍历新XML的每个resource节点,用id去字典里找旧值,找到就更新value内容
  • 最后保存更新后的XML

完整代码示例

首先记得引用必要的命名空间:

using System.Xml.Linq;
using System.Collections.Generic;

然后是核心逻辑代码:

// 加载新旧XML文件(替换成你的实际文件路径)
var newXmlDoc = XDocument.Load("new.xml");
var oldXmlDoc = XDocument.Load("old.xml");

// 构建旧XML中resource的id与value的映射字典,提升查找效率
var oldResourceMap = oldXmlDoc.Descendants("resource")
    .ToDictionary(
        resourceNode => resourceNode.Attribute("id")?.Value, // 键:resource的id
        resourceNode => resourceNode.Element("value")?.Value  // 值:对应的value内容
    );

// 遍历新XML中的所有resource节点,匹配更新
foreach (var newResourceNode in newXmlDoc.Descendants("resource"))
{
    var resourceId = newResourceNode.Attribute("id")?.Value;
    // 如果当前节点有id,且旧XML中有对应的记录
    if (!string.IsNullOrEmpty(resourceId) && oldResourceMap.TryGetValue(resourceId, out var oldValue))
    {
        var valueElement = newResourceNode.Element("value");
        if (valueElement != null)
        {
            // 更新value节点的内容为旧XML中的值
            valueElement.Value = oldValue;
        }
    }
}

// 保存更新后的XML(建议先存新文件验证,没问题再覆盖原文件)
newXmlDoc.Save("updated_new.xml");

关键细节说明

  • 高效查找:用ToDictionary把旧XML的节点转换成字典,这样每次查找的时间复杂度是O(1),比反复遍历旧XML要高效得多,尤其是当XML节点很多的时候
  • 空值安全:代码里用了?.空传播运算符和TryGetValue,避免了空引用异常,比如遇到没有id属性或者value节点的情况会自动跳过
  • 保留原有内容:只有旧XML中存在的id对应的节点会被更新,新XML里的其他节点(比如你的示例中的Plasma2、Plasma3)会保持原样

运行结果

用你提供的示例XML测试的话,最终生成的updated_new.xml会是这样:

<?xml version="1.0" encoding="utf-8"?>
<hmi-resources>
  <resource id="Plasma0">
    <value>NEW Plasma 123</value>
  </resource>
  <resource id="Plasma1">
    <value>NEW Plasma abc</value>
  </resource>
  <resource id="Plasma2">
    <value>Plasma 2</value>
  </resource>
  <resource id="Plasma3">
    <value>Plasma 3</value>
  </resource>
</hmi-resources>

内容的提问来源于stack exchange,提问作者Joscha Kern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:17:07