2

次のコードを使用します。

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

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

次の XML を比較します。

aDoc.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")));

要素自体が必要な場合は、を渡して要素を ID で比較するMoreLINQIEqualityComparer<XElement>のようなものを使用できます。ExceptBy

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