Estoy trabajando en Flex/AS3 en (por simplicidad) un editor XML. Necesito proporcionar funcionalidad de deshacer/rehacer.¿Puedo usar un algoritmo de diferencias de texto plano para rastrear cambios XML?
Por supuesto, una solución es almacenar todo el texto fuente con cada edición. Sin embargo, para conservar la memoria, me gustaría almacenar los diffs en su lugar (estos diffs también se utilizarán para transmitir actualizaciones al servidor para el guardado automático).
Mi pregunta es - ¿Puedo usar un algoritmo de diff texto plano para el seguimiento de estos cambios XML?
Mi investigación en Internet indica que I no puede hacerlo. Sin embargo, obviamente me falta algo. diff texto plano proporciona funcionalidad que es supuestamente:
diff(text, text') -> diffs
patch(text, diffs) -> text'
XML es simplemente el texto, ¿por qué no puedo simplemente usar diff() y el parche() para transformar el texto de forma fiable?
Por ejemplo: digamos que soy un poeta. Cuando escribo poesía, utilizo muchos signos de puntuación funky ... Ya sabes, como <, /, y>. (Puede ver a dónde voy con esto ...) Si estoy escribiendo mi poesía en una aplicación que usa diffs para proporcionar funcionalidad de deshacer/rehacer, ¿mi poesía se confunde cuando deshago/rehago mis ediciones? ¡Es solo texto! ¿Por qué hace una diferencia en el algoritmo?
Obviamente no consigo algo aquí ... ¡Gracias por explicarme! :)
ACTUALIZACIÓN:
Algunas discusiones que he encontrado en relación con diffing XML con un algoritmo de texto llano:
- 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?
Además, Yo entiendo y que un patrón de Comando es probablemente una mejor forma de implementar Deshacer/Rehacer. Simplifiqué mi caso de uso por simplicidad, y todavía creo que XML diffing es el mejor enfoque.
Señale por qué cree que no puede utilizar este enfoque. La única razón que veo en breve consideración sería si estaba intentando deshacer o rehacer parcial o fuera de servicio. Puedo pensar en enfoques más concisos, pero esa es otra pregunta. – msw
@rinogo: ambos enlaces publicados son sobre la comparación de HTML. Si comparas XML bien formado, entonces es una historia diferente, ya que la herramienta diff puede hacer suposiciones. –
actualizado. ¡Gracias! – rinogo