Forum: Rails-ES Comparar XML

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Chika (Guest)
on 2007-01-29 19:17
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
Xavier N. (Guest)
on 2007-01-29 19:38
(Received via mailing list)
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

   http://search.cpan.org/~sdether/XML-Diff-0.04/Diff.pm

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
Chika (Guest)
on 2007-01-29 20:05
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
>
>    http://search.cpan.org/~sdether/XML-Diff-0.04/Diff.pm
>
> 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...
Xavier N. (Guest)
on 2007-01-29 20:36
(Received via mailing list)
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
Chika (Guest)
on 2007-01-31 21:02
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" ?>
- <persona>
  <zipcode-trabajo />
  <genero>M</genero>
  <ciudad-trabajo />
  <celular>938102932</celular>
  <region />
  <origen-dato />
  <nombre>Pachucoded</nombre>
  <direccion-trabajo />
- <estudios>
- <estudio>
  <grado>cumbianchero</grado>
  <ano />
  <persona-id type="integer">276</persona-id>
  <id type="integer">81</id>
  <institucion>academia de bailes tropicales</institucion>
  </estudio>
  </estudios>
  <zipcode />
  <pais-trabajo>Albania</pais-trabajo>
  <fecha-de-nacimiento type="date">1921-01-15</fecha-de-nacimiento>
- <areas-interes>
- <areas-intere>
  <persona-id>276</persona-id>
  <nombre-area>interes 1</nombre-area>
  <id type="integer">1</id>
  <area-id>1</area-id>
  <tipo>I</tipo>
  </areas-intere>
  </areas-interes>
  <observaciones>probando</observaciones>
  <mail-rebotado type="boolean">false</mail-rebotado>
  <nacionalidad>chilena</nacionalidad>
  <mail>removed_email_address@domain.invalid</mail>
  <login-mapla />
  <id type="integer">276</id>
- <areas-especializacion>
- <areas-especializacion>
  <persona-id>276</persona-id>
  <nombre-area>especializacion</nombre-area>
  <id type="integer">3</id>
  <area-id>3</area-id>
  <tipo>E</tipo>
  </areas-especializacion>
- <areas-especializacion>
  <persona-id>276</persona-id>
  <nombre-area>especializacion 2</nombre-area>
  <id type="integer">4</id>
  <area-id>4</area-id>
  <tipo>E</tipo>
  </areas-especializacion>
  </areas-especializacion>
  <telefono-malo type="boolean">false</telefono-malo>
  <rut>12.232.454-8</rut>
  <password-mapla />
  <ciudad />
  <comuna />
  <gest-eventos type="boolean">false</gest-eventos>
  <comuna-trabajo />
  <apellido1>Bailarin</apellido1>
- <trabajadores>
- <trabajador>
  <categoria-id type="integer">4</categoria-id>
  <persona-id type="integer">276</persona-id>
  <secretaria-id />
  <mail />
  <id type="integer">143</id>
  <cargo>animador de fiestas</cargo>
  <empresa-id type="integer">19</empresa-id>
  </trabajador>
  </trabajadores>
  <telefono>23432435</telefono>
  <pais>Albania</pais>
  <direccion>pacha 3456</direccion>
  <apellido2>Marca El Paso</apellido2>
- <participantes>
- <participante>
  <categoria-id type="integer">1</categoria-id>
  <persona-id type="integer">276</persona-id>
  <id type="integer">47</id>
  <evento-id type="integer">1</evento-id>
  </participante>
  </participantes>
  <region-trabajo />
  </persona>

tupla_nueva:
 <?xml version="1.0" encoding="UTF-8" ?>
- <persona>
  <zipcode-trabajo />
  <genero>M</genero>
  <ciudad-trabajo />
  <celular>938102932</celular>
  <region />
  <origen-dato />
  <nombre>Pachucoded</nombre>
  <direccion-trabajo />
- <estudios>
- <estudio>
  <grado>cumbianchero</grado>
  <ano />
  <persona-id type="integer">276</persona-id>
  <id type="integer">81</id>
  <institucion>academia de bailes tropicales</institucion>
  </estudio>
  </estudios>
  <zipcode />
  <pais-trabajo>Albania</pais-trabajo>
  <fecha-de-nacimiento type="date">1921-01-15</fecha-de-nacimiento>
- <areas-interes>
- <areas-intere>
  <persona-id>276</persona-id>
  <nombre-area>interes 1</nombre-area>
  <id type="integer">1</id>
  <area-id>1</area-id>
  <tipo>I</tipo>
  </areas-intere>
  </areas-interes>
  <observaciones>probando</observaciones>
  <mail-rebotado type="boolean">false</mail-rebotado>
  <nacionalidad>chilena</nacionalidad>
  <mail>removed_email_address@domain.invalid</mail>
  <login-mapla />
  <id type="integer">276</id>
- <areas-especializacion>
- <areas-especializacion>
  <persona-id>276</persona-id>
  <nombre-area>especializacion</nombre-area>
  <id type="integer">3</id>
  <area-id>3</area-id>
  <tipo>E</tipo>
  </areas-especializacion>
- <areas-especializacion>
  <persona-id>276</persona-id>
  <nombre-area>especializacion 2</nombre-area>
  <id type="integer">4</id>
  <area-id>4</area-id>
  <tipo>E</tipo>
  </areas-especializacion>
  </areas-especializacion>
  <telefono-malo type="boolean">false</telefono-malo>
  <rut>12.232.454-8</rut>
  <password-mapla />
  <ciudad />
  <comuna />
  <gest-eventos type="boolean">false</gest-eventos>
  <comuna-trabajo />
  <apellido1>Bailarin</apellido1>
- <trabajadores>
- <trabajador>
  <categoria-id type="integer">4</categoria-id>
  <persona-id type="integer">276</persona-id>
  <secretaria-id />
  <mail />
  <id type="integer">143</id>
  <cargo>animador de fiestas</cargo>
  <empresa-id type="integer">19</empresa-id>
  </trabajador>
  </trabajadores>
  <telefono>23432435</telefono>
  <pais>Albania</pais>
  <direccion>pacha 3456</direccion>
  <apellido2>Marca El Paso</apellido2>
- <participantes>
- <participante>
  <categoria-id type="integer">1</categoria-id>
  <persona-id type="integer">276</persona-id>
  <id type="integer">47</id>
  <evento-id type="integer">1</evento-id>
  </participante>
  </participantes>
  <region-trabajo />
  </persona>
Xavier N. (Guest)
on 2007-02-01 09:45
(Received via mailing list)
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
Xavier N. (Guest)
on 2007-02-01 09:48
(Received via mailing list)
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
Chika (Guest)
on 2007-02-01 15:06
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.
This topic is locked and can not be replied to.