Алгоритм C # XML Diffing

У меня есть два XML, до и после того, как пользователь их отредактировал. Мне нужно убедиться, что пользователь только добавил новые элементы, но не удалил и не изменил старые.

Кто-нибудь может предложить мне хороший алгоритм для такого сравнения?

PS: Мой XML имеет очень тривиальную схему, они только наивно представляют структуру объекта (с вложенными объектами). Допустимых тегов немного, тег <object> может содержать только тег <name>, тег <type> или тег <list>. Тег <name> и <type> может содержать только строку; Вместо этого тег <list> может содержать тег <name> и один тег <object> (представляющий структуру объектов в списке). Строка в теге <name> может быть выбрана произвольно, вместо этого строка в теге <type> может быть только «string», «int», «float», «bool», «date» или «смесь».

Вот пример:

 <object>
      <name>Person</name>
      <type>composite</type>

      <object>
            <name>Person_Name</name>
            <type>string</type>
      </object>

      <object>
            <name>Person_Surname</name>
            <type>string</type>
      </object>

      <object>
            <name>Person_Age</name>
            <type>int</type>
      </object>

      <object>
            <name>Person_Weight</name>
            <type>float</type>
      </object>

      <object>
            <name>Person_Address</name>
            <type>string</type>
      </object>

      <object>
            <name>Person_BirthDate</name>
            <type>date</type>
      </object>

      <list>
            <name>Person_PhoneNumbers</name>

            <object>
                  <name>Person_PhoneNumber</name>
                  <type>composite</type>

                  <object>
                        <name>Person_PhoneNumber_ProfileName</name>
                        <type>string</type>
                  </object>
                  <object>
                        <name>Person_PhoneNumber_CellNumber</name>
                        <type>string</type>
                  </object>
                  <object>
                        <name>Person_PhoneNumber_HomeNumber</name>
                        <type>string</type>
                  </object>
                  <object>
                        <name>Person_PhoneNumber_FaxNumber</name>
                        <type>string</type>
                  </object>
                  <object>
                        <name>Person_PhoneNumber_Mail</name>
                        <type>string</type>
                  </object>
                  <object>
                        <name>Person_PhoneNumber_Social</name>
                        <type>string</type>
                  </object>
                  <object>
                        <name>Person_PhoneNumber_IsActive</name>
                        <type>bool</type>
                  </object>
            </object>
      </list>
 </object>

Ответы на вопрос(2)

Ваш ответ на вопрос