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

时间:2012-05-09 08:57:11

标签: c# xml linq-to-xml

我有不同的XML配置,具体取决于我连接的面板类型。

大多数面板具有相同的配置,但不同之处在于新版本。

e.g。

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中必须被覆盖的任何元素。但如果那个轮子已经被发明了,我不想重新发明它。

1 个答案:

答案 0 :(得分:0)

这就是诀窍:

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文件中的新值覆盖。

相关问题