【问题标题】:How can I compare 2 XML Documents?如何比较 2 个 XML 文档?
【发布时间】:2009-02-06 23:57:11
【问题描述】:

我有两个相似的文档,但我需要找到一种优雅而有效的方法来比较这两个文件并返回 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。

【问题讨论】:

    标签: c# linq linq-to-xml


    【解决方案1】:

    这是一个我知道有效的示例,我只用小文件进行了尝试(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 获得一些帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多