如何使用另一个 XML 元素的差异覆盖另一个 XML 元素

本文关键字:XML 另一个 元素 覆盖 何使用 | 更新日期: 2023-09-27 18:33:31

根据我连接的面板类型,我有不同的XML配置。

大多数面板具有相同的配置,但区别在于较新的版本。

例如

版本 1.0 面板具有以下内容

  <panel version="1.0">
    <options opt1="1823" opt2="7" opt3="127"/>
    <timers>
      <t1 min="0" max="99" />
      <t2 min="0" max="99" />      
    </timers>
  </panel>

版本 1.1 具有完全相同的配置,只是它对 opt1 具有不同的值。

  <panel version="1.1">
    <options opt1="7967" /> <!-- opt2 and opt3 are exactly the same -->
    <!-- the timer values are all exactly the same -->
  </panel>

问题有没有办法加载面板 1.0 的配置并自动覆盖与面板 1.1 的差异?即 .net 框架中是否内置了一些东西来比较 2 个 xml 文件并用另一个文件的差异覆盖 1?

如果没有,我可以将配置从面板 1.0 复制到面板 1.1,但这会复制大量数据,我试图避免这种情况。

我也可以先加载面板 1.0,然后在 1.1 中搜索必须覆盖的任何元素。但如果那个轮子已经被发明出来了,我不想重新发明它。

如何使用另一个 XML 元素的差异覆盖另一个 XML 元素

这起到了作用:

foreach (var el in panelV11.Descendants())
{
    var elName = el.Name;
    foreach (var attrib in el.Attributes())
    {
        var attrName = attrib.Name;
        panelV10.Element(elName).Attribute(attrName).Value = attrib.Value;
    }
}

然后只需使用 panelV10 作为主配置文件,旧值被 1.1 文件中的新值覆盖。