2009-02-06 9 views
2

У меня два документа одинаковы, но мне нужно найти элегантный и эффективный способ сравнить два файла и вернуть значения в DoC# 1, которых нет в DoC# 2.Как я могу сравнить 2 XML-документа?

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> 

Я думал об использовании LINQ, если я мог бы присоединиться эти два документа на поле идентификатора. Есть ли способ лучше? Я ищу, чтобы возвращать id #s 5 и 6.

ответ

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.

+0

работает отлично. Danke. – 2009-02-07 21:22:01

+0

рад, что смогу помочь –