2009-09-09 16 views
6

que tienen necesidad frecuente para probar que los archivos XML son correctos y necesitan una manera de probar que 2 cadenas XML (o documentos) son idénticos, tales como:¿Hay un AssertEquals para probar archivos XML?

XMLAssert.assertEquals(String xmlExpected, String xmlActual); 

Además sería útil para mostrar donde el documentos xml difieren.

Esto debe estar restringido a los documentos con standalone = "yes" (es decir, el DTD o esquema, si corresponde) no es significativo). Esto significa que no hay valores predeterminados y los tipos de atributos son irrelevantes. Los nodos de PCDATA de texto adyacente deben estar normalizados (concatenados).

Tenga en cuenta que esto no puede hacerse simplemente mediante la comparación léxica

Assert.assertEquals(xmlExpected, xmlActual); 

indefinidamente, ya que hay muchas maneras de hacer que el mismo conjunto de información XML. La comparación debe tener en cuenta los espacios de nombres en los elementos y atributos (pero no los valores de los atributos, que no son parte de la especificación).

Una forma de hacer esto podría implicar la canonicalización de ambos documentos. Alternativamente, podría usarse un XMLDiff.

No pude encontrar nada, así que escribí el mío hace unos años.

[I también tienen una necesidad particular para comparar valores de punto flotante, aunque este debe ser un truco ya que el tipo de datos de CDATA o PCDATA sólo puede ser imaginado y está fuera del alcance inmediato de la pregunta.]

NOTA: Probablemente tendrá que haber una solución específica para cada idioma. Estoy particularmente interesado en Java y C#

Respuesta

5

Para Java, debe finalizar la compra XMLUnit. ¡Y acabo de notar que también viene con una versión de .NET! Aquí hay una muestra de la versión de Java:

String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>"; 
String myTestXML = "<msg><localId>2376</localId></msg>"; 
assertXMLNotEqual(myControlXML, myTestXML); 
+0

Gracias. Esto es sin duda tan completo como deseé y algo más poderoso que lo que escribí. Es una lástima que no descubrí esto hace 2 años –

1

Puede intentar usar el XmlDiffPatch.dll para hacerlo. Vaya a http://msdn.microsoft.com/en-us/xml/bb190622.aspx, descargue "XML Diff and Patch" y agregue la referencia a la DLL en su proyecto. Nunca lo usé en el código real, pero puedes probar la herramienta XmlDiff.Exe que viene incluida para ver si se adapta a tus necesidades.

Cuestiones relacionadas