仅当存在file2元素的情况下,合并2个XML文件,其中file2元素将覆盖file1元素

时间:2019-12-05 19:39:13

标签: c# xml merge

我已经寻找并搜索了解决方案,但只找到了直接合并的示例。 我的任务如下... File1是我的“主”配置文件,我使用c#类模板将其反序列化。我的示例只是一个片段,它要大得多。 File2是包含仅在特定情况下使用的相同设置(相同类)的子集的文件。 我想同时反序列化并且仅覆盖File2中存在的File1中的那些设置。 顺便说一句,我什至无需将此文件保存到磁盘,最好更新File1反序列化的configuration对象。 谢谢!

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Configuration));
using (StreamReader streamReader = new StreamReader("DiagsConfig.xml"))
    configuration = (Configuration)xmlSerializer.Deserialize(streamReader);

文件1:

<Configuration>
    <PathDataOutput>D:\Diagnostics Data</PathDataOutput>
    <FRUTestTool>
        <NumDirectoriesToKeep>5</NumDirectoriesToKeep>
        <ControllerTest>
            <IsEnabled>true</IsEnabled>
            <Photocells>
                <NumPolls>20</NumPolls>
            </Photocells>
        </ControllerTest>
    </FRUTestTool>
</Configuration>

文件2:

<Configuration>
    <FRUTestTool>
        <ControllerTest>
            <Photocells>
                <NumPolls>200000000000000</NumPolls>
            </Photocells>
        </ControllerTest>
    </FRUTestTool>
</Configuration>

组合:(如您所见,从文件2继承的NumPolls仅是差异)

<Configuration>
    <PathDataOutput>D:\Diagnostics Data</PathDataOutput>
    <FRUTestTool>
        <NumDirectoriesToKeep>5</NumDirectoriesToKeep>
        <ControllerTest>
            <IsEnabled>true</IsEnabled>
            <Photocells>
                <NumPolls>200000000000000</NumPolls>
            </Photocells>
        </ControllerTest>
    </FRUTestTool>
</Configuration>

0 个答案:

没有答案