2009-10-13 8 views
5

Quelle est la meilleure façon de voir la différence entre deux fichiers XML en utilisant? J'ai étudié Hpricot et Nokogiri, mais je n'ai trouvé aucune bonne méthode de comparaison. J'ai aussi regardé des outils UNIX comme diffxml, mais je préfère utiliser quelque chose dans ruby.Diff deux documents XML dans Ruby?

Quelqu'un a-t-il des idées?

+2

Je ne pense pas que ce soit une question en double. Les arbres différents et les séquences diffé- rentes sont des problèmes différents (bien que liés abstraitement). – RecursivelyIronic

Répondre

1

Qu'en est-il de diff.rb?
Vous exportez vos deux documents XML vers des tableaux et obtenez le diff avec cette bibliothèque.

+0

le lien ne fonctionne plus! –

0

J'ai trouvé qui était plus facile à utiliser la bibliothèque Java XMLUnit que toute solution native

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 

Bien sûr, cela signifie que vous devez utiliser JRuby au lieu de CRuby, mais ce ne fut pas un obstacle important dans mon Cas.

0

Une autre option est de régulariser votre xml par disjoncter tour par xml-simple, et puis en faisant un diff tableau sur les lignes de la sortie:

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?