如何用另一个 XDocument 中的元素替换一个 XDocument 中的元素?

Dav*_*Dev 0 c# xml linq-to-xml

我有一个包含许多数据项的 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>
Run Code Online (Sandbox Code Playgroud)

较小的文档:

<Rootelement>
  <Desktop>
    <C>
      <El3 label="The NEW Label" tooltip="The NEW Tooltip" />
    </C>
  </Desktop>
</Rootelement>
Run Code Online (Sandbox Code Playgroud)

我想取出路径中的元素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>
Run Code Online (Sandbox Code Playgroud)

对我来说最好的方法是什么?

L.B*_*L.B 5

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();
Run Code Online (Sandbox Code Playgroud)

  • 它位于“System.Xml.XPath”命名空间中 (5认同)