使用以下代码:
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**
提前谢谢。
答案 0 :(得分: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"));