2010-04-30 104 views
1

我想獲得2個xml文檔的「差異」,並以不同的元素列表結束。下面是XML,我想知道是否有人可以提供幫助。在下面的例子中,我希望列表包含「file2.xml」元素和「file3.xml」元素,因爲它們與第一個xml文檔不同或者都是新的。LINQ to XML查詢幫助

在此先感謝!

<?xml version="1.0" encoding="utf-8" ?> 
<versioninfo> 
    <files> 
    <file version="1.0">file1.xml</file> 
    <file version="1.0">file2.xml</file> 
    </files> 
</versioninfo> 


<?xml version="1.0" encoding="utf-8" ?> 
<versioninfo> 
    <files> 
    <file version="1.0">file1.xml</file> 
    <file version="1.1">file2.xml</file> 
    <file version="1.0">file3.xml</file> 
    </files> 
</versioninfo> 

回答

1

相信你試圖做的是讓有不同版本的所有文件名的列表。如果是這樣,這將做到這一點:

XDocument first = (...); 
XDocument second = (...); 

var firstFiles = first.Element("versioninfo").Element("files").Elements("file"); 
var secondFiles = second.Element("versioninfo").Element("files").Elements("file"); 

var changedFileNames = 
    from f1 in firstFiles 
    join f2 in secondFiles 
     on f2.Value equals f1.Value 
    where f1.Attribute("version").Value != f2.Attribute("version").Value 
    select f1.Value; 

var firstFileNames = firstFiles.Select(f => f.Value); 
var secondFileNames = secondFiles.Select(f => f.Value); 
var addedFileNames = firstFileNames.Except(secondFileNames); 
var removedFileNames = secondFileNames.Except(firstFileNames); 

var allChanges = changedFileNames 
    .Concat(addedFileNames) 
    .Concat(removedFileNames); 
+0

但也是在一個列表中,但不是其他,所以你的答案是一半的解決方案。 – 2010-04-30 22:29:44

+0

好點,應該更仔細地閱讀問題;我已經更新這個包括添加/刪除的文件。 – Aaronaught 2010-04-30 22:41:33

+0

它是一半,缺少原始列表中的「arent」 – 2010-04-30 22:43:41