Comparar dos archivos XML y generar un tercero con XMLDiff en C #

Estoy tratando de escribir un algoritmo simple para leer dos archivos XML con exactamente los mismos nodos y estructura, pero no necesariamente los mismos datos dentro de los nodos secundarios y no el mismo orden. ¿Cómo podría crear una implementación simple para crear un tercer XML temporal que sea el diferencial entre los dos primeros, utilizando el XML Diff .DLL de Microsoft?

Diferencia XML en MSDN:

Herramienta de diferencias y parches XML

Herramienta de GUI de diferencias y parches XML

ejemplo de código XML de los dos archivos XML diferentes para comparar:

<?xml version="1.0" encoding="utf-8" ?> 
<Stats Date="2011-01-01">
 <Player Rank="1">
  <Name>Sidney Crosby</Name> 
  <Team>PIT</Team> 
  <Pos>C</Pos> 
  <GP>39</GP> 
  <G>32</G> 
  <A>33</A> 
  <PlusMinus>20</PlusMinus> 
  <PIM>29</PIM> 
 </Player>
</Stats>

<?xml version="1.0" encoding="utf-8" ?> 
<Stats Date="2011-01-10">
 <Player Rank="1">
  <Name>Sidney Crosby</Name> 
  <Team>PIT</Team> 
  <Pos>C</Pos> 
  <GP>42</GP> 
  <G>35</G> 
  <A>34</A> 
  <PlusMinus>22</PlusMinus> 
  <PIM>30</PIM> 
 </Player>
</Stats>

Resultado deseado (diferencia entre los dos)

<?xml version="1.0" encoding="utf-8" ?> 
<Stats Date="2011-01-10">
 <Player Rank="1">
  <Name>Sidney Crosby</Name> 
  <Team>PIT</Team> 
  <Pos>C</Pos> 
  <GP>3</GP> 
  <G>3</G> 
  <A>1</A> 
  <PlusMinus>2</PlusMinus> 
  <PIM>1</PIM> 
 </Player>
</Stats>

En este caso, probablemente usaría XSLT para convertir el archivo "diferencial" XML resultante en un archivo HTML ordenado, pero todavía no estoy allí. Todo lo que quiero hacer es mostrar en el tercer archivo XML la diferencia de cada valor numérico de cada nodo, comenzando desde el nodo secundario "GP".

C # código que tengo hasta ahora:

private void CompareXml(string file1, string file2)
{

    XmlReader reader1 = XmlReader.Create(new StringReader(file1));
    XmlReader reader2 = XmlReader.Create(new StringReader(file2));

    string diffFile = StatsFile.XmlDiffFilename;
    StringBuilder differenceStringBuilder = new StringBuilder();

    FileStream fs = new FileStream(diffFile, FileMode.Create);
    XmlWriter diffGramWriter = XmlWriter.Create(fs);

    XmlDiff xmldiff = new XmlDiff(XmlDiffOptions.IgnoreChildOrder |
                            XmlDiffOptions.IgnoreNamespaces |
                            XmlDiffOptions.IgnorePrefixes);
    bool bIdentical = xmldiff.Compare(file1, file2, false, diffGramWriter);

    diffGramWriter.Close();

    // cleaning up after we are done with the xml diff file
    File.Delete(diffFile);
}

Eso es lo que tengo hasta ahora, pero los resultados son basura ... tenga en cuenta que para cada nodo "Jugador", los primeros tres hijos tienenNO para ser comparado ... ¿Cómo puedo implementar esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta