Справка по LINQ to XML Query - PullRequest
       3

Справка по LINQ to XML Query

1 голос
/ 01 мая 2010

Я пытаюсь получить "diff" из 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 Ответ

1 голос
/ 01 мая 2010

Я считаю , что вы пытаетесь получить список всех имен файлов, которые имеют разные версии. Если это так, это будет сделано:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...