繁体   English   中英

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

[英]How to replace elements in one XDocument with elements from another XDocument?

我有一个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>

我这样做的最佳方法是什么?

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM