Como parte de la clase base para algunas pruebas unitarias exhaustivas, estoy escribiendo una función auxiliar que compara recursivamente los nodos de un objeto XmlDocument con otro en C# (.NET). Algunos requisitos de la presente:¿Cómo compararía dos documentos XML?
- El primer documento es la fuente, por ejemplo lo que quiero que sea el documento XML. Por lo tanto, el segundo es aquel en el que quiero encontrar diferencias y no debe contener nodos adicionales que no estén en el primer documento.
- Debe lanzar una excepción cuando se encuentran demasiadas diferencias significativas, y debe ser fácilmente comprendida por un ser humano que eche un vistazo a la descripción.
- El orden de elementos secundarios es importante, los atributos pueden estar en cualquier orden.
- Algunos atributos son ignorables; específicamente
xsi:schemaLocation
yxmlns:xsi
, aunque me gustaría poder decir cuáles son. - Los prefijos de los espacios de nombres deben coincidir tanto en atributos como en elementos.
- El espacio en blanco entre los elementos es irrelevante.
- Los elementos tienen elementos secundarios o
InnerText
, pero no ambos.
Mientras estoy desguazando algo juntos: ¿Alguien ha escrito tal código y sería posible compartirlo aquí?
Por otro lado, ¿cómo llamarías el primer y el segundo documento? Me he estado refiriendo a ellos como "fuente" y "objetivo", pero se siente mal ya que la fuente es lo que quiero que se parezca al objetivo , sino arrojo una excepción.
Pueden los nodos ser el mismo, pero se declaró en un orden diferente? – alexmac
No, los nodos deben estar en el mismo orden. Además de ser un requisito de los documentos, hace que la diferencia sea un poco más simple (solo enumere los niños y verifique uno a uno). –
> los atributos pueden estar en cualquier orden Lo bueno es que los atributos están desordenados por definición. –