C # XML Diffing Algorithmus

Ich habe zwei XML-Dateien, bevor und nachdem der Benutzer sie bearbeitet hat. Ich muss überprüfen, ob der Benutzer nur neue Elemente hinzugefügt, aber keine alten gelöscht oder geändert hat.

Kann mir jemand einen guten Algorithmus für diesen Vergleich vorschlagen?

Ps: Mein XML hat ein sehr triviales Schema, sie repräsentieren die Struktur eines Objekts (mit verschachtelten Objekten) nur auf naive Weise. Es gibt nur wenige zulässige Tags. Das <object> -Tag kann nur das <name> -Tag, das <type> -Tag oder ein <list> -Tag enthalten. Das <name> - und das <type> -Tag können nur eine Zeichenfolge enthalten. Das <list> -Tag kann stattdessen ein <name> -Tag und ein einzelnes <object> -Tag (das die Struktur der Objekte in der Liste darstellt) enthalten. Die Zeichenfolge im <name> -Tag kann frei gewählt werden, die Zeichenfolge im <type> -Tag kann stattdessen nur "string", "int", "float", "bool", "date" oder "composite" sein.

Hier ein Beispiel:

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage