【问题标题】:Merging XML Elements with LINQ将 XML 元素与 LINQ 合并
【发布时间】:2012-07-30 18:40:38
【问题描述】:

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

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

第二个文档 - children 如下所示:

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

节点&lt;Details/&gt; 必须替换为第二个文档的内容。 我正在尝试使用 Linq to XML 来执行此操作。第一个文档在 XDocument 类中表示,第二个文档在 XElement 类中表示。 &lt;Detail/&gt; 有几个子属性,我没有在这里列出。

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

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

这不太可能奏效。 我应该如何更换?

【问题讨论】:

  • 忽略您的父 XML 无效的事实:parentDoc.Root.Element("Details").ReplaceAll(childDoc.Root.Element("Details").Elements()) 为什么这“不太可能工作?”
  • 对 XML 感到抱歉。我输入它并没有意识到我必须关闭标签。 @Raphaël Althaus 具有正确的 XML。
  • @ColeCampbell 我的代码和你的代码都出现 NullReferenceException。

标签: c# linq linq-to-xml


【解决方案1】:
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>

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多