LINQ to XML查询帮助

时间:2010-04-30 22:11:26

标签: xml linq

我试图得到2个xml文档的“差异”,最后得到一个不同的元素列表。下面是XML,我想知道是否有人可以提供帮助。在下面的例子中,我希望列表包含“file2.xml”元素和“file3.xml”元素,因为它们与第一个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 个答案:

答案 0 :(得分: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);