如何比较2个XML文档?

时间:2009-02-06 23:57:11

标签: 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>

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。

1 个答案:

答案 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找到一些帮助。