PDA

View Full Version : [JAVA] Uguaglianza di alberi XML


f0/\/2!3
09-03-2008, 09:48
Sto impazzendo da tre giorni. Allora, il problema è il seguente: ho degli alberi xml che devono essere confrontati per vedere se sono uguali (in realtà sono dei nodi di documenti xml ma è lo stesso discorso perchè si portano dietro il sottoalbero annesso). Avevo pensato di utilizzare semplicemente il metodo toXML della libreria XOM che mi stampa in una stringa tutto il contenuto del nodo in analisi, nodo compreso e vedere se fosse uguale ad un altro stampato con lo stesso metodo: facendo così però naturalmente mi ritrovo con alberi che possono essere uguali ma non vengono presi in considerazione perchè hanno testo interno agli elementi diverso.

Allora ho provato ad utilizzare la combo delle seguenti librerie:

import nu.xom.tests.XOMTestCase;
import junit.framework.*;

di cui un'applicazione nel mio codice sarebbe così:


try
{
XOMTestCase.assertEquals(RootT2, rootT);
break;
}
catch (ComparisonFailure fail)
{
RootT2 = (Element)(RootT2.getParent());
}



Il problema è che spesso e volentieri per alcuni nodi ho un'eccezione che non viene minimamente "catchata" dalla comparison failure e ciò mi fa danno nel proseguio del programma...

L'eccezione è:


Exception in thread "main" junit.framework.AssertionFailedError: expected:<1> but was:<3>
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.failNotEquals(Assert.java:277)
at junit.framework.Assert.assertEquals(Assert.java:64)
at junit.framework.Assert.assertEquals(Assert.java:195)
at nu.xom.tests.XOMTestCase.compareChildren(XOMTestCase.java:401)
at nu.xom.tests.XOMTestCase.assertEquals(XOMTestCase.java:365)
at nu.xom.tests.XOMTestCase.assertEquals(XOMTestCase.java:279)
at unicam.aaftx.operators.Projection.evaluate(Projection.java:69)
at unicam.aaftx.operators.Scoring.threshold(Scoring.java:22)
at unicam.aaftx.parsing.Evaluation.eval(Evaluation.java:73)
at unicam.aaftx.data.Main.main(Main.java:46)


Ad una prima analisi credo che l'errore sia sul fatto che vede un nodo (il primo quindi quello che testo) e lo confronta con un nodo per lui uguale (il valore atteso, secondo parametro di assert equals) ma con numero di figli differente.


Non so più che pesci pigliare :(