我有两个文件都很相似,但我需要找到一种优雅而有效的方法来比较这两个文件并返回Doc#1中Doc#2中不存在的值。
XML Doc#1
<ids>
<id>1</id>
<id>2</id>
<id>5</id>
<id>6</id>
<id>7</id>
<id>8</id>
<id>9</id>
</ids>
</ids>
XML Doc#2
<ids>
<id>1</id>
<id>2</id>
<id>7</id>
<id>8</id>
<id>9</id>
</ids>
如果我可以在id字段上加入这两个文件,我正在考虑使用linq。有没有更好的办法?我希望返回id#5和6。
答案 0 :(得分:6)
这是我知道的一个示例,我只用小文件试了一下(File1.xml有20个项目,File2.xml有8个项目)。
XDocument file1Doc = XDocument.Load("File1.xml");
XDocument file2Doc = XDocument.Load("File2.xml");
IEnumerable<string> file1Elements = from d in file1Doc.Descendants("Id")
select d.Value;
IEnumerable<string> file2Elements = from d in file2Doc.Descendants("Id")
select d.Value;
var difference = file1Elements.Except(file2Elements);
或者,可能更符合您的要求:
XDocument file1Doc = XDocument.Load("File1.xml");
XDocument file2Doc = XDocument.Load("File2.xml");
IEnumerable<string> file2Elements = from d in file2Doc.Descendants("Id")
select d.Value;
var x = from include in file1Doc.Descendants("Id")
where file2Elements.Contains(include.Value) != true
select include;
您可能还会在101 LINQ Samples on MSDN找到一些帮助。