如何使用另一个 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 中搜索必须覆盖的任何元素。但如果那个轮子已经被发明出来了,我不想重新发明它。
这起到了作用:
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 文件中的新值覆盖。