2009-08-21 15 views
5

¿Existe una manera simple de comparar dos estructuras XML para determinar si tienen la misma estructura y datos?Comparar dos XmlNodes en C#

Tengo una función que devuelve un XmlNode y estoy intentando escribir pruebas unitarias para ello. Guardo el resultado XML correcto en un archivo. Durante la prueba, cargo el archivo en un XmlDocument, ubico el XmlNode adecuado y lo comparo con el resultado de la función. Una comparación directa no funciona (como se esperaba) e InnerXml tampoco funciona. Estoy considerando eliminar todos los espacios en blanco de InnerXml y compararlos, o escribir mi propia comparación para recorrer el árbol, pero no me gusta mucho ninguna de las opciones.

+0

¿Qué versión de .NET está ejecutando? –

Respuesta

2

Si tiene que usar XmlDocument y sus tipos de apoyo, considere el uso de Microsoft XmlDiffPatch, que realiza diff-operaciones personalizables en XML estructuras de datos.

7

XNode.DeepEquals. Lea las advertencias antes de usarlo.

+0

La pregunta es sobre 'XmlDocument' /' XmlNode', no sobre LINQ to XML. –

+0

Para ser precisos, su pregunta es sobre la comparación de estructuras XML. Su problema es con su enfoque (usando XmlDocument). Estoy de acuerdo con CodeToGlory: XNode.DeepEquals. –

2

Como respondió CodeToGlory, XNode.DeepEquals() puede ajustarse a su factura, consulte la sección de comentarios en la página de MSDN.

Si está atrapado con XmlDocument (en lugar de XDocument), la respuesta es: No, no hay una forma simple (existente) para hacerlo. XmlNode no anula Equals() ni proporciona una alternativa. Pero no es imposible escribir, y esa misma sección de Comentarios se puede usar como punto de partida para un algoritmo tree-walk.

consigue una imagen clara de sus necesidades en primer lugar, en relación con los atributos, comentarios, nodos CDATA etc.