【问题标题】:How to override an XML element with the differences in another?如何覆盖一个 XML 元素与另一个元素的差异?
【发布时间】:2012-05-09 08:57:11
【问题描述】:

根据我要连接的面板类型,我有不同的 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 的差异? IE。 .net 框架中是否内置了一些东西来比较 2 个 xml 文件并将 1 与另一个文件的差异覆盖?

如果没有,我可以将面板 1.0 中的配置复制到面板 1.1 中,但这会复制大量数据,我正在努力避免这种情况。

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

【问题讨论】:

    标签: c# xml linq-to-xml


    【解决方案1】:

    这成功了:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2012-01-29
      相关资源
      最近更新 更多