Как я могу сравнить 2 XML-документа? - PullRequest
2 голосов
/ 07 февраля 2009

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

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. Есть ли способ лучше? Я хочу вернуть идентификаторы # 5 и 6.

1 Ответ

6 голосов
/ 07 февраля 2009

Вот пример, который, как я знаю, работает, я пробовал его только с небольшими файлами (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 на MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...