首页 > 解决方案 > 合并 2 条具有相同架构的 xml 记录

问题描述

我们如何合并 2 个具有相同架构的 XML 记录?

例如,假设我们有两条记录,例如:

<msg>
<name>alex</name>
<payload></payload>
</msg>

第二个:

<msg>
<name></name>
<payload>blabla</payload>
</msg>

预期结果:

<msg>
<name>alex</name>
<payload>blabla</payload>
</msg>

我们只是取了非空值。

我们如何合并两个具有相同架构的 xml 记录?

标签: c#.netxml

解决方案


一个简单的实现将通过按名称配对相应项目的元素并创建一个选择非空白元素的文本的新元素。

XElement ShallowMerge(XElement a, XElement b) =>
    new XElement(a.Name,
        from ae in a.Elements()
        join be in b.Elements() on ae.Name equals be.Name
        select new XElement(ae.Name,
            !String.IsNullOrWhiteSpace((string)ae)
                ? (string)ae
                : (string)be
        )
    );

推荐阅读