2

我有两个相似的文档,但我需要找到一种优雅而有效的方法来比较这两个文件并返回 Doc #1 中不存在于 Doc #2 中的值。

XML 文档 #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 文档 #2

  <ids>
    <id>1</id>
    <id>2</id>
    <id>7</id>
    <id>8</id>
    <id>9</id>
  </ids>

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

4

1 回答 1

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;

您还可以在 MSDN 上查看 101 LINQ Samples找到一些帮助。

于 2009-02-07T01:04:47.653 回答