Algoritmo de diferenciación XML C #

Tengo dos XML, antes y después de que el usuario los haya editado. Necesito verificar que el usuario solo haya agregado nuevos elementos pero no haya eliminado o cambiado los antiguos.

¿Alguien puede sugerirme un buen algoritmo para hacer esa comparación?

Ps: Mi XML tiene un esquema muy trivial, solo representan la estructura de un objeto (con objetos anidados) de una manera ingenua. Hay pocas etiquetas permitidas, la etiqueta <objeto> solo puede contener etiqueta <nombre>, etiqueta <tipo> o una etiqueta <lista>. Las etiquetas <nombre> y <tipo> solo pueden contener una cadena; La etiqueta <list> puede contener una etiqueta <name> y una sola etiqueta <object> (que representa la estructura de los objetos en la lista). La cadena en la etiqueta <name> se puede elegir libremente, la cadena en la etiqueta <type> en su lugar solo puede ser "string", "int", "float", "bool", "date" o "composite".

Aquí un ejemplo:

 <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>

Respuestas a la pregunta(2)

Su respuesta a la pregunta