2009-10-13 10 views
5

Qual è il modo più semplice per vedere la differenza tra due file xml utilizzando?Diff due doc in XML in Ruby?

Ho esaminato Hpricot e Nokogiri ma non sono riuscito a trovare alcun buon metodo di confronto. Ho anche esaminato strumenti unix come diffxml, ma preferisco usare qualcosa in ruby.

Qualcuno ha qualche idea?

+2

Non penso che questa sia una domanda doppia. Alberi diffe- renti e sequenze diffe- renti sono problemi diversi (benché astrattamente correlati). – RecursivelyIronic

risposta

1

Che dire di diff.rb?
Esportate i vostri due documenti xml in array e ottenete il diff con quella libreria.

+0

il link non funziona più! –

0

ho scoperto che era più facile da utilizzare la libreria Java XMLUnit rispetto a qualsiasi soluzione 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 

Naturalmente, questo significa che dovete utilizzare JRuby invece di CRuby, ma che non era un ostacolo significativo nel mio Astuccio.

0

Un'altra opzione è quella di regolarizzare il vostro XML inciampare intorno ad essa tramite XML-semplice, e poi fare un diff serie sulle linee di uscita:

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?