2009-10-13 16 views
5

¿Cuál es la forma más fácil de ver la diferencia entre dos archivos xml?¿Difiere dos doc XML en Ruby?

Miré en Hpricot y Nokogiri pero no pude encontrar ningún buen método de comparación. También busqué herramientas de Unix como diffxml, pero preferiría usar algo en ruby.

¿Alguien tiene alguna idea?

+2

No creo que esta sea una pregunta duplicada. Los árboles difusos y las secuencias difusas son problemas diferentes (aunque abstractivamente relacionados). – RecursivelyIronic

Respuesta

1

¿Qué hay de diff.rb?
Usted exporta sus dos documentos xml a las matrices y obtiene el diff con esa biblioteca.

+0

¡el enlace ya no funciona! –

0

encontré que era más fácil de usar la biblioteca de Java XMLUnit que cualquier solución nativa

require 'java' 
require '/usr/share/java/xmlunit.jar' 
java_import org.custommonkey.xmlunit.Diff 

puts Diff.new("<a></a>", "<a/>").similar 
puts Diff.new("<a/>", "<b/>").similar 

Por supuesto, esto significa que tiene que usar JRuby en lugar de CRuby, pero eso no fue un obstáculo importante en mi caso.

0

Otra opción es la de regularizar su xml por ida y vuelta de ella a través de XML-simple, y luego hacer un diff serie en las líneas de la salida:

require 'rubygems' 
require 'xmlsimple' 
require 'diff' 

def regularize(xml) 
    XmlSimple.xml_out(XmlSimple.xml_in(xml)) 
end 

def diff_xml(a,b) 
    Diff.new(regularize(a).split("\n"), regularize(b).split("\n")) 
end 

puts diff_xml("<doc><a/></doc>", "<doc><a></a></doc>").diffs.empty? 
puts diff_xml("<doc><a/></doc>", "<doc><b/></doc>").diffs.empty? 
Cuestiones relacionadas