2011-01-18 11 views
15

Ho bisogno di diff grandi strutture di directory contenenti file generati .xml e .wsdl. I file .xml generati differiscono nell'ordine in cui appaiono gli elementi secondari. Il metodo XmlUnit Diff.similar() dovrebbe gestire questo caso:Esistono alternative a XmlUnit?

"Due documenti sono considerati" simili "se contengono gli stessi elementi e attributi indipendentemente dall'ordine."

Tuttavia, questo non è il caso. Ho preso un file .xml, ho invertito l'ordine di due elementi figlio e XmlUnit dice che non sono simili.

XmlUnit è danneggiato, non offre più funzionalità rispetto all'utilità di conversione integrata.

Esiste un'alternativa a XmlUnit che riconosce differenze semplici nei file .xml come l'ordinamento degli elementi figlio?

+6

Se si desidera aiuta a modificare il tuo post per includere (a) il tuo codice che mostra come hai istanziato 'Diff' e invocato' Diff.similar() ', e (b) a esempio minimo di XML che dimostra ciò che percepisci come output errato. –

risposta

1

Sono d'accordo con il commento di Jim. La maggior parte dei problemi con XmlUnit era dovuta all'inizializzazione errata.

Tuttavia, si può sempre dare un'occhiata al codice sorgente XMLUnit e sostituire il gestore Diff con il proprio se si ritiene che l'implementazione non stia facendo ciò di cui si ha bisogno. Il codice è abbastanza facile da comprendere e sarete in grado di controllare completamente il comportamento senza molti sforzi necessari per implementare il vostro motore diff.

3

ho scoperto che impostando la seguente opzione risolto il problema della inesatte (dis) similarità:

XMLUnit.setIgnoreWhitespace(true); 
+3

Questo è uno dei problemi principali che ho con XMLUnit, l'installazione statica che fa sì che i thests si influenzino a vicenda. Preferisco vedere queste chiamate sull'oggetto Diff. – Somatik

1

E 'meglio ordinare XML, prima di confrontandolo con xmlunit, invece di usare xmlunit ordinamento scrivere il proprio , sarebbe molto più semplice della configurazione di xmlunit per le tue esigenze

5

Ho un problema simile, nel mio caso avevo diversi tag con lo stesso nome, ma attributi diversi (l'ordine non aveva importanza), ma XmlUnit sempre controllato prima con il primo, il secondo con il secondo ... che potrebbe essere scambiato. La mia domanda era:

Comparing similar xml files with XmlUnit with unordered tags (same tag name with different attributes)

ho trovato una soluzione qui:

http://www.infoq.com/articles/xml-unit-test

Nel mio caso, è stato risolto solo ignorando il qualificatore elemento:

Diff diff = new Diff(controlXml, responseXml); 
    diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());