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>