2

使用以下代码:

    XDocument aDoc = XDocument.Load(fileA);
    XDocument bDoc = XDocument.Load(fileB);

    var commonfromA = aDoc.Descendants("Project").Except(bDoc.Descendants("Project")); 

我比较以下 XML:

文档.xml

<Employees>
      <Project ID="1" Name="Project1"/>
      <Project ID="2" Name="Project2"/>
</Employees>

bDoc.xml

<Employees>
  <Project ID="1" Name="Project1"/>
  <Project ID="3" Name="Project3"/>
</Employees> 

当我执行我获得的代码时

<Project ID="1" Name="Project1"/>
<Project ID="2" Name="Project2"/>

而不是

<Project ID="2" Name="Project2"/> **Which is the elements that are in A but not in B**

先感谢您。

4

1 回答 1

1

是的,这是因为 aDoc 中的所有元素实际上都不在 bDoc。如果您向其中的每一个元素询问其父元素,它们将报告不同的结果。

如果您对获得 ID 感到满意,这很容易:

var idsJustInA = aDoc.Descendants("Project")
                     .Select(x => (int) x.Attribute("ID"))
                     .Except(bDoc.Descendants("Project"))
                                 .Select(x => (int) x.Attribute("ID")));

如果你想要元素本身,你可以传递一个IEqualityComparer<XElement>通过 ID 比较元素,或者你可以使用类似ExceptBy来自MoreLINQ的东西:

var justInA = aDoc.Descendants("Project")
                  .ExceptBy(bDoc.Descendants("Project"),
                            x => (int) x.Attribute("ID"));
于 2012-05-25T15:50:56.270 回答