将XML元素与LINQ合并

时间:2012-07-30 18:40:39

标签: c# linq linq-to-xml

我有两个XML文档。 我的目标是用第二个Xml文档的全部内容替换第一个文档中的一个节点。 所以第一个文档 - Parent 看起来像这样:

<Root>
    <AgencyName = "Some Agency"/>
    <Originator = "Some other Agency"/>
    <Type = "AnonymousType"/>
    <Details/>
</Root>

第二个文件 - 儿童如下所示:

<Root>
    <Details>
        <Detail1>
            ...
        </Detail1>
        <Detail2>
            ...
        </Detail2>
        <Detail3>
            ...
        </Detail3>
    </Details>
</Root>

必须将节点<Details/>替换为第二个文档的内容。 我试图使用Linq to XML来做到这一点。第一个文档在XDocument类中表示,第二个文档在XElement类中表示。 <Detail/>有几个子属性,我没有在这里列出。

我试图用这个XElement类替换第一个文档中的元素。 如果我尝试这样的话,

ParentDoc.Element("Details").ReplaceAll(children);

它不太可行。 我应该如何替换?

1 个答案:

答案 0 :(得分:2)

var doc = XDocument.Load(@"C:\Tools\test.xml");
var doc2 = XDocument.Load(@"C:\Tools\test2.xml");
var children = doc2.Root.Element("Details");
var parentNode = doc.Root.Element("Details");
parentNode.ReplaceWith(children);

顺便说一句,你的xml不正确,所以你会得到例外。

我试过

<Root>
    <AgencyName name= "Some Agency"/>
    <Originator name= "Some other Agency"/>
    <Type name= "AnonymousType"/>
    <Details/>
</Root>

<Root>
    <Details>
        <Detail1>
           asdf
        </Detail1>
        <Detail2>
            asde
        </Detail2>
        <Detail3>
            eere
        </Detail3>
    </Details>
</Root>

得到了

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <AgencyName name="Some Agency" />
  <Originator name="Some other Agency" />
  <Type name="AnonymousType" />
  <Details>
    <Detail1>
           asdf
        </Detail1>
    <Detail2>
            asde
        </Detail2>
    <Detail3>
            eere
        </Detail3>
  </Details>
</Root>