Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将一个XDocument中的元素替换为另一个XDocument中的元素?_C#_Xml_Linq To Xml - Fatal编程技术网

C# 如何将一个XDocument中的元素替换为另一个XDocument中的元素?

C# 如何将一个XDocument中的元素替换为另一个XDocument中的元素?,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我有一个XDocument,其中包含许多数据项 我有另一个XDocument,它包含一个非常小的数据项集合。较小文档中的数据项在较大文档中具有匹配路径处的相应元素 我要做的是循环遍历较小的文档,对于找到的每个元素,我要更新较大的文档,以便用较小文档的值替换其相应的值 例如,较大的文档: <Rootelement> <Desktop> <A> <El1 label="original blah" /> </A&g

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

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

这看起来不错,但是
XPathSelectElement
XDocument
上似乎不可用。我读到我需要包括System.Linq,但我已经引用了它,它仍然没有被认可。那只卖3.5美元吗?我使用的是4.0。它位于
System.Xml.XPath
namespace这看起来不错,但是
XPathSelectElement
XDocument
上似乎不可用。我读到我需要包括System.Linq,但我已经引用了它,它仍然没有被认可。那只卖3.5美元吗?我使用的是4.0,它位于
System.Xml.XPath
名称空间中
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();
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();