我试图得到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>
答案 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);