Сравнивая два XML-файла и получайте разницу между ними в новом XML-файле - PullRequest
1 голос
/ 24 сентября 2019

Мне нужна помощь, пожалуйста, у меня есть два XML-файла, они имеют одинаковый идентификатор («имя»), я хочу получить разницу между ними.если у меня есть дополнительные узлы в Xml file_1, так что это пойдет в diff.XML-файл в соответствии только с идентификатором.Я написал код сома, но я не знаю, как это будет, если;Я знаю, что мы можем использовать инструмент Microsoft Diff and Patch, но мне нужен другой код: вот мой код:

    public static void Main()
    {
           //fields
         const string XML1 = @"File_1.xml";
         const string XML2 = @"File_2.xml";
         const string ResultFile = @"ResultFile.xml";
         XmlDocument doc1 = new XmlDocument();
         doc1.Load(XML1);
         XmlDocument doc2 = new XmlDocument();
         doc2.Load(XML2);

         for(var d = 0; d < doc1.SelectNodes("root/data").Count; d++)
         {
             var child = doc1.SelectNodes("root/data")[d];
            if (I don't know …..) {

           }
         }

XML fil_1

<root>
  <data name="senChangePassword" xml:space="preserve">
    <value>Byt lösenord</value>
    <comment>Sprint 02 - Jessica</comment>
  </data>
  <data name="senChangesWereSuccessfullySaved" xml:space="preserve">
    <value>Ändringarna är sparade</value>
    <comment>Sprint 02 - Jessica</comment>
  </data>
  <data name="senChangeUserSettings" xml:space="preserve">
    <value>Ändra uppgifter</value>
    <comment>Sprint 02 - Jessica</comment>
  </data>
  <data name="senCompareWith" xml:space="preserve">
    <value>Jämför</value>
    <comment>Sprint 02 - Jessica</comment>
  </data>
  <data name="senCreatedQuestions" xml:space="preserve">
    <value>Skapade frågor</value>
    <comment>Sprint 02 - Jessica</comment>
  </data>
</root>

** XML file_2 **

<root>
  <data name="senChangePassword" xml:space="preserve">
    <value>Change Password</value>
    <comment>Sprint 02 - Jessica</comment>
  </data>
  <data name="senChangesWereSuccessfullySaved" xml:space="preserve">
    <value>Saved changes</value>
    <comment>Sprint 02  Jessica</comment>
  </data>
  <data name="senCompareWith" xml:space="preserve">
    <value>Compare</value>
    <comment>Sprint 02 - Jessica</comment>
  </data>
</root>

XML file_result

<root>
  <data name="senChangeUserSettings" xml:space="preserve">
    <value>Ändra uppgifter</value>
    <comment>Sprint 02 - Jessica</comment>
  </data>
  <data name="senCreatedQuestions" xml:space="preserve">
    <value>Skapade frågor</value>
    <comment>Sprint 02 - Jessica</comment>
  </data>
</root>

1 Ответ

1 голос
/ 24 сентября 2019

Простая версия (если вас не интересует производительность или объем памяти):

var children1 = doc1.SelectNodes("root/data");
var children2 = doc2.SelectNodes("root/data");
var result = List<XmlNode>();

for(var d = 0; d < children1.Count; d++)
         {
             var child = children1[d];
             var match = children2.FirstOrDefault(x=>
                 XElement.Parse(x.OuterXml).ToString() == XElement.Parse(child.OuterXml).ToString());
            if (match == null) {
               result.Add(child);
           }
         }

и выгрузите узлы результатов в файл результатов, как вам удобнее

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