filling empty xml nodes with nodes from another xml

时间:2017-10-30 15:33:09

标签: c# xml xml-parsing linq-to-xml

Document 1 is full

<_Items>
    <_ItemName>COLOR REVOLUTION LIPSTICK</_ItemName>
    <_ItemQt>18300</_ItemQt>
    <_ItemNumber>1</_ItemNumber>
    <_Unit>шт</_Unit>
    <_ItemContract>
      <_ContractName>03011/1</_ContractName>
      <_ContractNumber>AA/001/2016</_ContractNumber>
      <_ContractDate>2016-11-24</_ContractDate>
    </_ItemContract>
    <_ItemCode>3304100000</_ItemCode>
    <_ItemCost>352529.07</_ItemCost>
    <_ItemPrice>1050.10</_ItemPrice>
  </_Items>

Document 2 is partially filled

<_Items>
    <_ItemName />
    <_ItemQt />
    <_Unit />
    <_ItemNumber />
    <_ItemContract>
      <_ContractName />
      <_ContractNumber />
      <_ContractDate />
    </_ItemContract>
    <_ItemCode />
    <_ItemCostNew>372338.46</_ItemCostNew>
    <_ItemCostOld>186169.21</_ItemCostOld>
    <_ItemPrice />
  </_Items>

So, how can i fill empty values in document 2 by same elements in document 1? My idea is to delete all empty nodes in document 2

XDocument xdoc = XDocument.Load(document2);
        xdoc.Descendants("Employee")
            .Where(e => e.Descendants().Any(d => String.IsNullOrEmpty(d.Value)))
            .Remove();

And then import all missing elements from document 1. But I don't know how to avoid overwriting of filled nodes

1 个答案:

答案 0 :(得分:0)

简单地遍历目标节点,为每个节点检查它是否为空,如果不是,则从另一个节点获取它的值。