如何比较2个XML文档?

2 c# linq linq-to-xml

我有两个文档都很相似,但我需要找到一种优雅而有效的方法来比较这两个文件并返回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>
Run Code Online (Sandbox Code Playgroud)

XML Doc#2

  <ids>
    <id>1</id>
    <id>2</id>
    <id>7</id>
    <id>8</id>
    <id>9</id>
  </ids>
Run Code Online (Sandbox Code Playgroud)

如果我可以在id字段上加入这两个文件,我正在考虑使用linq.有没有更好的办法?我希望返回id#5和6.

Ric*_*ire 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);
Run Code Online (Sandbox Code Playgroud)

或者,可能更符合您的要求:

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;
Run Code Online (Sandbox Code Playgroud)

您可能还会在MSDN上查找101 LINQ示例.