Sto lavorando in Flex/AS3 su (per semplicità) un editor XML. Devo fornire funzionalità di annullamento/ripristino.Posso usare un algoritmo diff in chiaro per il tracciamento delle modifiche XML?
Ovviamente, una soluzione consiste nel memorizzare l'intero testo di origine con ogni modifica. Tuttavia, per risparmiare memoria, vorrei invece memorizzare i diff (questi diff saranno anche usati per trasmettere aggiornamenti al server per il salvataggio automatico).
La mia domanda è - posso usare un algoritmo diff testo in chiaro per il monitoraggio di questi cambiamenti XML?
La mia ricerca su Internet indica che I non può fare così. Tuttavia, mi manca ovviamente qualcosa. diff Plaintext fornisce funzionalità che è presumibilmente:
diff(text, text') -> diffs
patch(text, diffs) -> text'
XML è semplicemente il testo, quindi perché non posso semplicemente usare diff() e la patch() per trasformare il testo in modo affidabile?
Ad esempio: Diciamo che sono un poeta. Quando scrivo poesie, uso molta punteggiatura funky ... Sai, come <, /, e>. (Potresti vedere dove sto andando con questo ...) Se sto scrivendo la mia poesia in un'applicazione che utilizza diffs per fornire funzionalità di annullamento/ripetizione, la mia poesia diventa confusa quando annullo/ripristino le mie modifiche? È solo testo! Perché fa la differenza nell'algoritmo?
Ovviamente non capisco qualcosa qui ... Grazie per aver spiegato! :)
UPDATE:
Alcune discussioni che ho incontrato per quanto riguarda diffing XML con un algoritmo di testo in chiaro:
- http://code.google.com/p/google-diff-match-patch/wiki/Plaintext
- Is there a JS diff library against htmlstring just like google-diff-match-patch on plain text?
Inoltre, Io capisco e che un pattern Command è probabilmente un modo migliore per implementare Undo/Redo. Ho semplificato il mio caso d'uso per semplicità, e continuo a pensare che la diffusione di XML sia l'approccio migliore.
Si prega di indicare cosa ti fa pensare che non è possibile utilizzare questo approccio. L'unica ragione che vedo su una breve considerazione sarebbe se stavi tentando di annullare/ripristinare parziali o fuori servizio. Posso pensare ad approcci più concisi ma questa è un'altra domanda. – msw
@rinogo: entrambi i link che hai postato riguardano il confronto tra HTML. Se stai confrontando un XML ben formato, allora è una storia diversa, poiché lo strumento diff può fare supposizioni. –
aggiornato. Grazie! – rinogo