Comparar XML

Hola, Dado que Ruby da para soñar con las sorpresas que tiene, quisiera
saber si existe alguna forma en que se puedan comparar 2 xml.
Estoy guardando en distintas variables lo siguiente:

@tupla_nueva = @persona.to_xml(:include =>
[:lenguajes,:estudios,:trabajadores,:areas_interes,:areas_especializacion,:participantes])

será posible comparar esta variable con otra que tiene almacenado xml y
que sólo me muestre las diferencias?

gracias

On Jan 29, 2007, at 6:17 PM, Chika wrote:

xml y
que sólo me muestre las diferencias?

Te refieres a un diff generico para XML como el que ofrece este
modulo Perl

XML::Diff - XML DOM-Tree based Diff & Patch Module - metacpan.org

o asumes que la estructura es la misma en ambos documentos y solo
quieres detectar que nodos de texto han cambiado? Si se trata de esto
ultimo, como quisieras que se reportaran las diferencias?

– fxn

Xavier N. wrote:

On Jan 29, 2007, at 6:17 PM, Chika wrote:

xml y
que s�lo me muestre las diferencias?

Te refieres a un diff generico para XML como el que ofrece este
modulo Perl

XML::Diff - XML DOM-Tree based Diff & Patch Module - metacpan.org

o asumes que la estructura es la misma en ambos documentos y solo
quieres detectar que nodos de texto han cambiado? Si se trata de esto
ultimo, como quisieras que se reportaran las diferencias?

– fxn

Me refiero a detectar qué nodos del texto han cambiado. Quisiera que se
reportaran las diferencia mostrando ambas versiones, quizas en otro
xml…

On Jan 29, 2007, at 7:05 PM, Chika wrote:

o asumes que la estructura es la misma en ambos documentos y solo
quieres detectar que nodos de texto han cambiado? Si se trata de esto
ultimo, como quisieras que se reportaran las diferencias?

– fxn

Me refiero a detectar qué nodos del texto han cambiado. Quisiera
que se
reportaran las diferencia mostrando ambas versiones, quizas en otro
xml…

Podrias enviar un ejemplo de XMLs con algunas diferencias y otros
campos iguales, y como quedaria el XML de salida?

– fxn

Creo que no me estoy dando a entender, o yo no entiendo. Estoy guardando
en la base tuplas de datos antiguos y nuevos, por ejemplo para una
persona, cuando su “ficha” es modificada. Luego quisiera poder comparar
la tupla antigua con la nueva, para mostrar sólo los cambios. El xml que
guarda depende del cambio que se realice.
En cóidog tengo:
@tupla = @persona.to_xml(:include =>
[:lenguajes,:estudios,:trabajadores,:areas_interes,:areas_especializacion,:participantes])
tupla_nueva = @persona.to_xml(:include =>
[:lenguajes,:estudios,:trabajadores,:areas_interes,:areas_especializacion,:participantes])
ModificacionesPersona.create(:persona_id =>@persona.id,
:usuario_id => session[:user_id],:tipo => ‘U’, :tupla_nuevo =>
@tupla_nueva , :tupla_antiguo => @tupla)

un ejemplo de lo que queda guardado en cada campo:
tupla:

<?xml version="1.0" encoding="UTF-8" ?>
  • M 938102932 Pachucoded
  • cumbianchero 276 81 academia de bailes tropicales Albania 1921-01-15
  • 276 interes 1 1 1 I probando false chilena [email protected] 276
  • 276 especializacion 3 3 E
  • 276 especializacion 2 4 4 E false 12.232.454-8 false Bailarin
  • 4 276 143 animador de fiestas 19 23432435 Albania pacha 3456 Marca El Paso
  • 1 276 47 1

tupla_nueva:

<?xml version="1.0" encoding="UTF-8" ?>
  • M 938102932 Pachucoded
  • cumbianchero 276 81 academia de bailes tropicales Albania 1921-01-15
  • 276 interes 1 1 1 I probando false chilena [email protected] 276
  • 276 especializacion 3 3 E
  • 276 especializacion 2 4 4 E false 12.232.454-8 false Bailarin
  • 4 276 143 animador de fiestas 19 23432435 Albania pacha 3456 Marca El Paso
  • 1 276 47 1

On Feb 1, 2007, at 8:44 AM, Xavier N. wrote:

Si, si, si eso esta claro. Lo que no esta claro es como es el XML
con las diferencias. Por eso pedi como ejemplo 2 de entrada y 1 de
salida, solo enviaste este ultimo.

Ops, eso fue una edicion a medias, tenia que decir que no enviaste
este ultimo claro.

– fxn

Efectivamente la idea es comparar xml que podrian tener estructuras
distintas
(muchas areas de interes, muchos estudios, etc). La salida no se si me
interesa en xml, quizas…
Creo que tendré que dejarlo para que el usuario vea las diferencias
“manualmente” ya que mi idea era hacer algo parecido a lo que hace el
plugin act_as_audited que guarda los cambios realizados sobre una
tabla…
en fin… no vale la pena programar un codigo especial ya que las
estructuras de cada “tupla” XML puede ser muy distintas.
Gracias Xavier.

On Jan 31, 2007, at 8:02 PM, Chika wrote:

Creo que no me estoy dando a entender, o yo no entiendo. Estoy
guardando
en la base tuplas de datos antiguos y nuevos, por ejemplo para una
persona, cuando su “ficha” es modificada. Luego quisiera poder
comparar
la tupla antigua con la nueva, para mostrar sólo los cambios. El
xml que
guarda depende del cambio que se realice.

Si, si, si eso esta claro. Lo que no esta claro es como es el XML
con las diferencias. Por eso pedi como ejemplo 2 de entrada y 1 de
salida, solo enviaste este ultimo.

Por cierto que veo que hay colecciones. Si uno puede tener mas areas
de interes que otro no se cumple que los XML sean estructuralmente
sean iguales y la cosa ya necesita algo mas de codigo del que tenia
en la cabeza.

– fxn