如何更换与另一个的XDocument元素于一体的XDocument元素?(How to replac

2019-09-24 07:07发布

我有一个包含多个数据项的一个XDocument。

我有一个包含数据项的一个非常小集合另一个的XDocument。 较小的文档中的数据项具有在一致的路径较大文档中相应的元件。

我想要做的就是通过较小的文件,并为我找到我想要使相应的值替换为更小的文件更新更大的文档的每个元素循环。

例如,较大的文件:

<Rootelement>
  <Desktop>
    <A>
      <El1 label="original blah" />
    </A>
  </Desktop>
  <Desktop>
    <B>
      <El2 />
    </B>
  </Desktop>
  <Desktop>
    <C>
      <El3 label="I'm the label" tooltip="I'm the tooltip" />
    </C>
  </Desktop>
</Rootelement>

较小的文件:

<Rootelement>
  <Desktop>
    <C>
      <El3 label="The NEW Label" tooltip="The NEW Tooltip" />
    </C>
  </Desktop>
</Rootelement>

我想利用该元件在路径Rootelement/Desktop/C/El3和在与从较小的一个所述一个较大的文件中相同的路径替换元件,所以大的文档变成:

<Rootelement>
  <Desktop>
    <A>
      <El1 label="original blah" />
    </A>
  </Desktop>
  <Desktop>
    <B>
      <El2 />
    </B>
  </Desktop>
  <Desktop>
    <C>
      <El3 label="The NEW Label" tooltip="The NEW Tooltip" />
    </C>
  </Desktop>
</Rootelement>

什么是我做这件事的最佳方式?

Answer 1:

var xDocBig = XDocument.Parse(xmlBig);
var xDocSmall = XDocument.Parse(xmlSmall);

var eBig = xDocBig.XPathSelectElement("/Rootelement/Desktop/C");
var eSmall = xDocSmall.XPathSelectElement("/Rootelement/Desktop/C");

eBig.ReplaceWith(eSmall);

var newXml = xDocBig.ToString();


文章来源: How to replace elements in one XDocument with elements from another XDocument?