ciao.
Devo fare il parsing di un formato xml open per l'architettura di nome ifc.
Il documento xml è composto di tag che hanno due attributi ref e id.
L'attributo ref rimanda ad un id e l'attributo id puo' essere utilizzato in un ref.
Un tag ref o id che sia ha un nome che è uguale a quello della classe nel modello
ad oggetti di queesto formato.
Chiedo scusa se rompo ma ho trovato una nuova soluzione piu' efficente e ne discuto qui.
Sax è molto veloce , ed è per questo che l'ho scelto per fare il parsing di xml
di notevoli dimensioni 200/300 mb l'uno.
ANche perchè molti dati non mi interessano quindi non devo navigare qui o la come
nel dom, se sono nella mappa delle classi utilizzate da me registrate prendo i dati
, altrimenti no.
a mano a mano che vado avanti nel documentoxml , instanzio
una classe ogni volta che viene trovato un tag con il nome di quella classe.
quando trovo un id ed una classe instanzio quella classe , la popolo con i
dati dei tag interni a quella classe e chiamo il metodo notify su tutti gli
osservatori che si sono agganciati al subject con quella chiave.Aggancio il notifire
ogni volta che trovo un ref e lo aggancio con il valore del ref che corrisponde ad una
classe con id uguale .
poi chiamo l'update con un parametro data , l'oggetto di quella classe popolata
e setto la variabile del get/set a quella classe al posto del ref
con indirizzo a questo parametro.
in pratica mentre avanzo nell' xml con sax mettiamo , trovo un id ,
popolo l'oggetto con i dati che mi arrivano subito(sono successivi e contenuti
tra i tag della classe del tag con id="xxx" )e quindi richiamando notify "trasformo"
tutti i ref in riferimenti a a questo oggetto popolato(che sarebbe la classe puntata dai
ref.
Il problema nasce quando trovo un ref che punta ad un id gia passato, che è gia stato
popolato e assegnato (o magari non è stato assegnato a nessun ref perchè fino a quel
punto non c'erano ref a quell id).
Che soluzione posso usare?
La prima che mi viene in mente è quella di salvare il riferimento alle classi id
gia passate in un vector nella classe subject per poi riutilizzarle dopo, ma questo abbatte le prestazioni ,
esiste un metodo migliore per questa soluzione?
Grazie.